несколько строк в форме для одного и того же объекта в symfony2

Я создаю простую форму с несколькими строками:

контроллер:

public function indexAction() { $repository = $this->getDoctrine()->getRepository('MyBundle:Product'); $products = $repository->findAll(); foreach ($products as $product) { $forms[] = $this->createForm(new ProductType, $product)->createView(); } return $this->render('MBundle:Default:index.html.twig', array('form' => $forms); } 

Я делаю это в ветке:

 <form action="{{ path('_submit') }}" method="post"> {% for key, formData in forms %} {{ form_row(formData.id) }} {{ form_row(formData.name) }} {{ form_row(formData.nameEnglish) }} <br clear="all" /> {% endfor %} </form> 

Когда я отправляю форму, каждый из моих полей ввода имеет одинаковые атрибуты имени, и я получаю только последний. Как захватить все строки и проверить их в моем контроллере submitAction ()? Каждый вход должен иметь уникальное имя, не так ли? … и, возможно, мне нужно установить каким-то образом name = "something [name] []", но как это сделать?

Solutions Collecting From Web of "несколько строк в форме для одного и того же объекта в symfony2"

Ok Cerad был прав с его комментарием, и мы должны использовать коллекцию для этого. Сначала это может показаться глупостью, но это правильно. Мне потребовалось некоторое время, чтобы обойти его.

Поэтому мне пришлось создать ProductType, который является arrayCollection и вставляет каждый Продукт. (точно так же, как в документации с Task и тегами)

Я использовал это:

 $repository = $this->getDoctrine()->getRepository('ExampleBundle:Product'); $products = $repository->findAll(); $productCollection = new Products; foreach ($products as $product) { $productCollection->getProducts()->add($product); } $collection = $this->createForm(new ProductsType, $productCollection); return $this->render('ExampleBundle:Default:index.html.twig', array( 'collection' => $collection->createView() )); 

Тогда в twig я делаю:

 <div class="products"> {% for product in collection.products %} {{ form_row(product.id) }} {{ form_row(product.name) }} {{ form_row(product.description) }} <br clear="all" /> {% endfor %} </div> 

Работа выполнена.

И даже вы можете применять темы к каждой строке следующим образом:

 {% block _productsType_products_entry_name_row %} <div class="yourDivName">{{ block('form_widget') }}</div> {% endblock %} {% block _productsType_products_entry_description_row %} <div class="yourDivDescription">{{ block('form_widget') }}</div> {% endblock %} 

Классная вещь!