我创建了一个包含多行的简单表单:
控制器:
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);
}
Run Code Online (Sandbox Code Playgroud)
我用树枝渲染这个:
<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>
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,我的每个输入字段集都具有相同的名称属性,而我只得到最后一个.如何获取所有行并在我的submitAction()控制器中验证它们?每个输入都需要有唯一的名称,对吧?...也许我需要以某种方式设置name ="something [name] []"但是怎么做呢?
Ok Cerad对他的评论是对的,我们必须使用这个集合.起初听起来像是胡说八道,但它有点正确.我花了一段时间来解决它.
所以我必须创建一个ProductsType,它是一个arrayCollection并插入每个Product.(就像使用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()
));
Run Code Online (Sandbox Code Playgroud)
然后在树枝上我做:
<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>
Run Code Online (Sandbox Code Playgroud)
任务完成.
甚至您可以通过以下方式将主题应用于每一行:
{% 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 %}
Run Code Online (Sandbox Code Playgroud)
酷的东西!
| 归档时间: |
|
| 查看次数: |
5276 次 |
| 最近记录: |