如何在Symfony2中多次渲染相同的表单?

时间:2015-07-10 09:35:12

标签: php forms symfony

我有一个包含多个购物车的模板。可以有不同数量的购物车,没有固定的限制。

在每个购物车中,我想要一个用户可以选择国家/地区的表单。如果他提交表格,则应确定运费。

现在我正在做以下事情来实现它:

{% for cart in carts %}
    {# Some template stuff #}
    {{ form_start(form) }}
        <div class="form-input">
        <label for="country" class="middle-color">Country <span class="active-color">*</span></label>
        {{ form_widget(form.country) }}
    {{ form_end(form) }}
{% endfor %}

这是我的表单构建器:

$form = $this->createFormBuilder()
    ->add('country', 'choice', array('choice_list' => $choiceList, 'label' => 'country',
        'attr' => array('class' => "custom-selectbox dark-color light-gradient")))
    ->getForm();

现在的问题是这个逻辑适用于第一个购物车,但是没有显示其他购物车的形式。我怎么处理这个?

2 个答案:

答案 0 :(得分:9)

我遇到了这个以及关于类似问题的另一个问题。 You can find my first answer for a solution here

为了将它包装起来,我没有在控制器中调用表单上的createView()函数,就像将表单传递给视图时一样,但是在树枝视图中也是如此。

E.g。在您的控制器操作中,您确实返回表单对象本身:

return $this->render('AppBundle:Cart:list.html.twig', ['formObject' => $form];

并在您的视图中,您将在每个循环中设置表单:

{% for cart in carts %}
    {# Some template stuff #}
    {% set form = formObject.createView %}
    {{ form_start(form) }}
        <div class="form-input">
        <label for="country" class="middle-color">Country <span class="active-color">*</span></label>
        {{ form_widget(form.country) }}
    {{ form_end(form) }}
{% endfor %}

答案 1 :(得分:-1)

您应该使用collection表单类型。以下是以How to Embed a Collection of Forms

开头的指南

P.S。请注意,在渲染表单窗口小部件后,窗体组件将其标记为已渲染,并且不再渲染。