我在同一页面上两次使用了createFormBuilder函数,该函数可用于同一实体。我的问题是Symfony仅将第一个生成的表单检测为表单,因此提交表单时,我不能对第二个表单使用方法$form->isSubmitted() && $form->isValid()
。
我的猜测是,这是因为两种形式与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')
,generateUrl方法中的类属性和路由之外,其他完全相同
这两个方法在我的控制器中执行,并且表单视图发送到该视图。