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

Kho*_*oly 7 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 %}
Run Code Online (Sandbox Code Playgroud)

这是我的表单构建器:

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

现在问题是这个逻辑适用于第一个购物车,但没有显示进一步购物车的表格.我怎么处理这个?

lor*_*dos 10

我遇到了这个以及关于类似问题的另一个问题.你可以在这里找到解决方案的第一个答案.

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

例如,在您的控制器操作中,您确实返回了表单对象本身:

return $this->render('AppBundle:Cart:list.html.twig', ['formObject' => $form];
Run Code Online (Sandbox Code Playgroud)

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

{% 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 %}
Run Code Online (Sandbox Code Playgroud)


And*_*nko -1

您应该使用收集表单类型。这是如何嵌入表单集合的指南

PS 请注意,渲染表单小部件后,表单组件会将其标记为已渲染,并且不会再次渲染。