我在Symfony中创建了一个表单:
$form = $this->createFormBuilder($template)
->add('product1', 'text')
->add('product2', 'text')
->add('save', 'submit')
->getForm();
现在这是我的枝条:
{{ form_start(form) }}
{% for i in 1..2 %}
<div class="col-md-3">
<div class="product">
<div class="name">
{{ form_label(form.product{{ i }} ) }}
{{ form_errors(form.product{{ i }} ) }}
{{ form_widget(form.product{{ i }} ) }}
</div>
</div>
</div>
{% endfor %}
{{ form_end(form) }
主要思想是迭代for for并获得一个新的form.product<X>
每个循环。
我无法使它工作,我甚至不知道是否可以这样做。有什么想法吗?
答案 0 :(得分:1)
我建议你为此目的使用Collection类型。但如果你想按自己的方式去做,你应该这样做:
{{ form_start(form) }}
{% for i in 1..2 %}
<div class="col-md-3">
<div class="product">
<div class="name">
{{ form_label( attribute(form, 'product' ~ i) ) }}
{{ form_errors( attribute(form, 'product' ~ i) ) }}
{{ form_widget( attribute(form, 'product' ~ i) ) }}
</div>
</div>
</div>
{% endfor %}
{{ form_end(form) }
答案 1 :(得分:1)
你是对的,它可能不会奏效。有关信息,Twig中的串联符号是&#34;〜&#34;。 在您的情况下,如果您的实体应该有2个或更多&#34;产品&#34;您应该使用集合而不是手动创建每个产品。 在您的实体中,您将拥有类似
的内容/**
* @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;
在产品实体上,你会有
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
然后在您的第一个实体__constructor或您的控制器中,您可以迭代创建任意数量的产品,然后将它们添加到实体中。
在您的表单中,您只需添加:
$builder->add('products', 'collection');
你可以在Twig中迭代它。
希望这会对你有所帮助
答案 2 :(得分:0)
您应该从只与“产品”实体具有ManyToOne关系的实体开始。假设我们将此实体称为“ProductContainer”。
然后为ProductContainer创建一个表单,其中只有一个类型为“collection”的字段,它将为您创建产品列表。
您可以按照本教程:http://symfony.com/doc/current/cookbook/form/form_collections.html