Zikula CSRF令牌无效

时间:2017-11-28 12:34:51

标签: forms symfony zikula

我正在修改模板edit.html.twig以隐藏任何字段。 我已经修改了控制器中的editAction以加载我的模板。 我遇到了CSRF的问题。提交表单时,令牌CSRF无效。我试图重新加载表单,但我有相同的结果。 (该模块是在MOST 1.1.0和ZK 2.0.2中创建的,我正在修改edit.html.twig)

问题是什么?

我已尝试插入我删除的字段,但问题仍然存在。

消息错误:" CSRF令牌无效。请尝试重新提交表单。"     _token(     " Symfony的\元器件\表格\扩展\核心\型号\ HiddenType"     )

我检测到未在模板中创建令牌。如果我有此代码,则生成令牌。     {{form_end(form)}}
如果我将代码更改为:     {{form_end(form,{' render_rest':false})}} 该令牌未生成。

所以,我补充道     {{form_widget(form._token)}} 现在生成令牌,但是当我提交表单时,我有相同的消息" CSRF令牌无效。请尝试重新提交表单。"

1 个答案:

答案 0 :(得分:0)

你应该使用

{{ form_end(form) }}

再次执行以下操作以删除不需要的字段。

修改modules/YourVendor/YourAppModule/Form/Type/YourFormType.php并添加以下内容:

use Symfony\Component\Form\FormBuilderInterface;

...

/**
 * @inheritDoc
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    parent::buildForm($builder, $options);

    $builder->remove('yourUnwantedField');
}

最后将已修改的文件路径添加到模型设置容器的skipFiles属性中:

skipFiles "
    Form/Type/YourFormType.php
"

这可确保生成器不会重新创建和覆盖此文件,因此您的自定义代码也会在重新生成后保留。