在 Sonata Admin 生成的表单中禁用 CSRF 保护
Disable CSRF protection in form generated by Sonata Admin
在 Sonata Admin 中,我需要在我的某些表单中禁用 CSRF 令牌,但有时我不想创建表单类型 class,而是选择让 Sonata 生成表单,如下所示:
/** @var $form \Symfony\Component\Form\Form */
$form = $this->admin->getForm();
此时我该如何禁用 CSRF 令牌?
我认为这是不可能的,因为从 \Symfony\Component\Form\Form
实例开始,您可以访问实现 FormConfigInterface
的对象 ($form->getConfig()
):您可以调用它 getOptions
或 getOption
但没有 setOption
方法。
如果没有表单类型 class,更改 CSRF 字段的最佳方法是在管理 Class 中。为此,可以覆盖此功能:
public function getFormBuilder() {
$this->formOptions['data_class'] = $this->getClass();
$this->formOptions['csrf_protection'] = false;
$formBuilder = $this->getFormContractor()->getFormBuilder(
$this->getUniqid(),
$this->formOptions
);
$this->defineFormBuilder($formBuilder);
return $formBuilder;
}
在 Sonata Admin 中,我需要在我的某些表单中禁用 CSRF 令牌,但有时我不想创建表单类型 class,而是选择让 Sonata 生成表单,如下所示:
/** @var $form \Symfony\Component\Form\Form */
$form = $this->admin->getForm();
此时我该如何禁用 CSRF 令牌?
我认为这是不可能的,因为从 \Symfony\Component\Form\Form
实例开始,您可以访问实现 FormConfigInterface
的对象 ($form->getConfig()
):您可以调用它 getOptions
或 getOption
但没有 setOption
方法。
如果没有表单类型 class,更改 CSRF 字段的最佳方法是在管理 Class 中。为此,可以覆盖此功能:
public function getFormBuilder() {
$this->formOptions['data_class'] = $this->getClass();
$this->formOptions['csrf_protection'] = false;
$formBuilder = $this->getFormContractor()->getFormBuilder(
$this->getUniqid(),
$this->formOptions
);
$this->defineFormBuilder($formBuilder);
return $formBuilder;
}