在 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()):您可以调用它 getOptionsgetOption 但没有 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;
}