Forms 在Symfony中创建带有for的表单

Forms 在Symfony中创建带有for的表单,forms,symfony,twig,Forms,Symfony,Twig,我在Symfony中创建了一个表单,如下所示: $form = $this->createFormBuilder($template) ->add('product1', 'text') ->add('product2', 'text') ->add('save', 'submit') ->getForm(); 这是我的小树枝: {{ form_start(form) }} {% for i in 1..2 %}

我在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) }
{{form_start(form)}
{1..2%中的i为%1}
{{form_标签(form.product{{i}}}}
{{form_errors(form.product{{i}}}}
{{form_小部件(form.product{{i}}}}
{%endfor%}
{{form_end(form)}
其主要思想是迭代for并获得新的
form.product
每个循环。
我无法让它工作,我甚至不知道是否可以用这种方式完成。有什么想法吗?

我建议您为此使用集合类型。但如果您想用自己的方式完成,您应该这样做:

{{ 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) }
{{form_start(form)}
{1..2%中的i为%1}
{{form_标签(属性(形式,'product'~i))}
{{form_errors(属性(form,'product'~i))}
{{form_小部件(属性(形式,'product'~i))}
{%endfor%}
{{form_end(form)}

你说得对,它可能不起作用。请注意,细枝中的连接符号是“~”。 在您的情况下,如果您的实体应该有2个或更多的“产品”,那么您应该使用集合,而不是手动创建每个产品。 在你的实体中,你会有

/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="category")
 */
protected $products;
在产品实体上,您可以

 /**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
 * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
 */
protected $category;
然后在您的第一个实体u_构造函数或控制器中,您迭代以创建任意数量的产品,并将它们添加到实体中

在表格中,您只需添加:

$builder->add('products', 'collection');
你可以在细枝上迭代


希望这将帮助您

您应该从一个与“产品”实体只有多个关系的实体开始。假设我们将该实体称为“产品容器”

然后为ProductContainer创建一个表单,其中只有一个字段的类型为“collection”,它将为您创建一个产品列表


您可以按照本教程进行操作:

为什么不使用集合类型?这样会更简单;-)我也会提供一个集合示例,但这是一个很好的答案