【问题标题】:Symfony 2.6 : addError inside PRE_SUBMIT eventSymfony 2.6:PRE_SUBMIT 事件中的 addError
【发布时间】:2015-05-16 14:20:20
【问题描述】:

我有一个 PRE_SUBMIT 事件,如果出现问题,我会尝试更正一个字符串。在这种情况下,我想在某些情况下在特定字段中使用“addError”。

如果我这样做:

$form->addError(new \Symfony\Component\Form\FormError('my message'));

“我的消息”出现,但如果我尝试这样做:

$form->get('my_field_name')->addError(new FormError('my message'));

尽管我把所有的东西都放在了 Twig 中,但“我的消息”从未出现过。

你知道出了什么问题吗?

【问题讨论】:

    标签: symfony


    【解决方案1】:
    $form->addError(new \Symfony\Component\Form\FormError('my message'));
    

    $form->get('my_field_name')->addError(new FormError('my message'));
    

    是两个不同的东西。

    在第一种情况下,您在表单元素上添加了一个错误,您可以在模板中使用{{ form_error(form) }} 显示该错误。在第二种情况下,您在表单的特定字段上添加错误,您可以使用{{ form_error(form.my_field_name) }} 显示。

    如果您希望 my_field_name 上设置的错误显示在表单中,您必须在您的字段 http://symfony.com/fr/doc/current/reference/forms/types/form.html#error-bubbling 上使用选项 error_bubbling

    【讨论】:

    • 您所说的是我尝试时所理解的,但在我的情况下,尽管我在特定字段中添加了错误,但在我做{{ form_error(form.my_field_name) }} 时,这个并没有出现。然后我知道 error_bubling 但这并不能回答问题。
    【解决方案2】:

    我今天在 Symfony 5 中遇到了同样的事情,并认为这是一个错误或文档错误,所以我向 Symfony 报告了它:https://github.com/symfony/symfony/issues/35831

    希望这种行为会得到改变(允许在PRE_SUBMIT 期间向表单字段添加错误),或者至少它将被明确记录为限制/可能的意外行为。现在,您可以避免这种情况,方法是永远不要在 PRE_SUBMIT 中添加错误,而是将它们添加到 POST_SUBMIT 中,它会按预期工作。

    【讨论】:

    • 我想知道您的字段错误是否在提交过程中没有被擦除。您的字段有效吗?文档说它可用于:“在将数据提交到表单之前从请求中更改数据;在将数据提交到表单之前添加或删除表单字段。” .他们没有提到错误案例
    • 您可以自己检查,我在问题中添加了一个FormType来演示问题,以便开发人员有一个最小的测试用例。这里主要是表单的错误没有被擦除,但是表单字段的错误被擦除了,这绝对是不一致的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2015-08-08
    • 2016-12-19
    相关资源
    最近更新 更多