Symfony 2.4-重复表单字段-当值不匹配时,如何将违规映射到第二个字段


Symfony 2.4 - Repeated form field - When values do not match, how to map violation to the second field?

我有一个重复的表单字段(Symfony 2.4),我想将"values not matching"错误映射到第二个字段(因为在我看来这更自然)。

我尝试将此选项添加到表单字段:

'error_mapping' => array('.' => 'second_field_name')

但是,所有的违规行为(甚至是与应用于第一个字段的约束相关的违规行为)都会映射到第二个字段。我试图深入研究源代码,但找不到除.之外的属性路径来捕捉"值不匹配"错误。

有人尝试过类似的事情吗?

从我读到的内容来看,我觉得你真正想做的是在两个字段的底部显示所有重复的字段错误。与一个或另一个包含字段相关的所有错误都应显示在各自子字段的底部。

我想在这里明确的是,与单个子字段相关的所有错误都应该只出现在发生错误的子字段下;与两个字段相关的错误("值不匹配"就是这样的错误)应该与repeated域本身相关。

因此,您实际上不需要修改PHP代码中的任何内容。您应该删除您的*error_mapping*权限,并让它解析为默认值。

您要做的是修改重复字段的模板。为此,您可能需要为应用程序创建一个表单主题。如果你不熟悉这个概念,我建议你看看关于这个的文档。

完成后,您需要修改*repeated_row*块。表单主题化使用继承,因此重复字段的默认块呈现为:

{% block form_row %}
{% spaceless %}
    <div class="form_row">
        {{ form_label(form) }}
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
{% endspaceless %}
{% endblock form_row %}

你需要做的是在你的表单主题模板中添加这个:

{% block repeated_row %}
{% spaceless %}
    <div class="form_row">
        {{ form_label(form) }}
        {{ form_widget(form) }}
        {{ form_errors(form) }}
    </div>
{% endspaceless %}
{% endblock repeated_row %}

这样,与重复相关的错误将显示在字段之后,而不是显示在字段之前。

只需使用second代替second_field_name

        ->add('plainPassword', 'repeated', [
            'type' => 'password',
            'invalid_message' => 'user.password_repeat.not_match',
            'error_mapping' => [
                '.' => 'second'
            ]
        ])

因此,我希望它会有所帮助,因为谷歌搜索该任务的结果仍然会导致这个问题,而没有正确的答案

相关文章: