Symfony3渲染多个时间相同的表单

时间:2016-03-29 13:38:10

标签: forms twig symfony

我想多次渲染相同的表单,以便为两个不同的标签处理相同的操作。 问题是,当我尝试时,只显示第一个标签的表单,如果我更改表单的 id 名称 ,则会发生事件。 我发现它是symfony 的预期行为,但我仍然需要它才能工作。

我发现它可能适用于某个系列,但不知道它是如何工作的。

树枝:

{{ form(contactForm, {'attr': {'id': 'contactFormId' ~ Client.Id}, 'name': "contactFormName" ~ Client.Id})}}

形式:

$this->contactForm = $this->createFormBuilder($contact, array('allow_extra_fields' =>true))
->add('Nom',        TextType::class, array('mapped'=>false))
->add('Prenom',     TextType::class, array('mapped'=>false))
->add('Telephone',  TextType::class, array(
    'label' => 'Téléphone'))
->add('Email',      TextType::class)
->add('Ajouter',    SubmitType::class)
->getForm();

2 个答案:

答案 0 :(得分:5)

这是一个较老的问题,但我遇到了类似的情况。我想在列表视图中有一个表单对象的多个版本。对我来说,解决方案是将表单对象上的createView()调用移动到视图,而不是在控制器中调用它。这是关于分离问题的一种肮脏的解决方案,但我想发布它所以它可能会帮助其他人。

我的控制器操作如下所示:

/**
 * @Route("", name="cart_show")
 * @Method("GET")
 */
public function showAction(Request $request)
{

    /** @var CartInterface $cart */
    $cart = $this->get('rodacker.cart');

    $deleteForm = $this->createDeleteForm();

    return $this->render(
        'AppBundle:Cart:show.html.twig',
        ['cart' => $cart, 'deleteForm' => $deleteForm]
    );

    // ...
    private function createDeleteForm()
    {
        return $this->createForm(
            OrderItemDeleteType::class,
            null,
            [
                'action' => $this->generateUrl('cart_remove_item'),
                'method' => 'DELETE',
            ]
        );
    }
}

在视图中我通过调用从控制器传递的表单变量(form)上的createView函数来设置deleteForm变量:

{% for item in items %}
    {% set form =  deleteForm.createView %}
    {{ form_start(form) }}
    {{ form_widget(form.item, {'value': item.image.filename}) }}
    <button type="submit" class="btn btn-xs btn-danger" title="Artikel entfernen">
        <i class="fa fa-trash-o"></i> entfernen
    </button>
    {{ form_end(form) }}
{% endfor %}

答案 1 :(得分:0)

渲染Symfony表单后,同一表单将不再呈现。

我建议创建一个表单类并多次调用Controller :: createForm()来创建所需数量的Form实例;你可以在所有表​​格上独立调用isSubmitted等。 http://symfony.com/doc/current/book/forms.html#creating-form-classes