首页 > 解决方案 > Symfony 同一页面中同一实体的两种形式

问题描述

我在与同一实体一起使用的同一页面上使用了两次 createFormBuilder 函数。$form->isSubmitted() && $form->isValid()我的问题是 Symfony 仅将第一个生成的表单检测为表单,因此在提交表单时,我无法将该方法用于我的第二个表单。

我的猜测是这是因为对应于 CSRF 字段的隐藏标记对于这两种形式是相同的。

有没有办法为第二种形式生成不同的令牌而不停用它?

在我看来这两个生成的表格

<form name="form" method="post" class="form-delete-confirm">
    <input type="hidden" name="_method" value="DELETE" />
    <input type="hidden" id="form__token" name="form[_token]" value="h0i7WF2uQxi376ZF4kMm4TbuD0cE8TYPhWP9b-oNqJ4" />
</form>

<form name="form" method="post" class="form-post-confirm">
    <input type="hidden" id="form__token" name="form[_token]" value="h0i7WF2uQxi376ZF4kMm4TbuD0cE8TYPhWP9b-oNqJ4" />
</form>

例如,我有两种生成每个表单的方法

public function createParticipantPostForm($meetingId = null, $userId = null)
    {
        $form = $this->createFormBuilder(null, ['attr' => ['class' => 'form-post-confirm']]);
        // The action is null when one form is created form the modal, it is then defined thanks to the user click
        if (null !== $meetingId && null !== $userId) {
            $form = $form->setAction(
                $this->generateUrl(
                    'meeting_participant_create', [
                        'meeting_id' => $meetingId,
                        'user_id' => $userId,
                    ]
                )
            );
        }

        return $form->setMethod('POST')->getForm();
    }

另一个完全一样,除了setMethod('DELETE'),class属性和generateUrl方法中的路由

这两种方法在我的控制器中执行,并将表单视图发送到视图。

标签: symfony

解决方案


推荐阅读