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

Php Symfony 2.4-重复表单字段-当值不匹配时,如何将冲突映射到第二个字段?,php,forms,symfony,Php,Forms,Symfony,我有一个重复的表单字段(Symfony 2.4),我只想将“values not matching”错误映射到第二个字段(因为我觉得这更自然) 我尝试将此选项添加到表单字段: 'error\u mapping'=>数组('.'=>'第二个字段\u name') 但是,所有冲突(甚至与应用于第一个字段的约束相关的冲突)都会映射到第二个字段。 我试图深入研究源代码,但除了之外,我找不到其他属性路径来捕获“值不匹配”错误 有人尝试过类似的事情吗?从我读到的内容来看,我的印象是,您真正想要做的是在两个字

我有一个重复的表单字段(Symfony 2.4),我只想将“values not matching”错误映射到第二个字段(因为我觉得这更自然)

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

'error\u mapping'=>数组('.'=>'第二个字段\u name')

但是,所有冲突(甚至与应用于第一个字段的约束相关的冲突)都会映射到第二个字段。 我试图深入研究源代码,但除了
之外,我找不到其他属性路径来捕获“值不匹配”错误


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

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

我想在这里说明的是,与单个子字段相关的所有错误只应出现在发生错误的子字段下;与这两个字段相关的错误(“值不匹配”就是这样的错误)应该与重复字段本身相关

因此,您实际上不需要修改PHP代码中的任何内容。您应该删除*error\u 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 form_row%}
{%spaceless%}
{{form_标签(form)}
{{form_errors(form)}}
{{form_widget(form)}
{%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 %}
{%block repeated\u row%}
{%spaceless%}
{{form_标签(form)}
{{form_widget(form)}
{{form_errors(form)}}
{%endspaceless%}
{%endblock重复_行%}

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

只需使用second而不是second\u field\u name

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

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

谢谢你的回答。这不仅仅是在哪里显示错误的问题,因为我还使用关于哪些字段出错的信息来添加CSS元素样式的类。当然,我也可以解决这个问题(类似于您所建议的),但我只是希望有一个干净的、正确的方法来实现这一点,而不必编写基于视图的逻辑。我会继续研究一段时间,如果找不到更好的方法,我最终会把你的答案标记为接受。再次感谢。好吧,CSS样式确实是基于视图的逻辑,不是吗?您建议的信息的使用也可以在表单主题中完成,Symfony的MVC结构应该会吸引您这样做。这就是我要做的,因为我更喜欢尽可能地将这种逻辑与PHP分开。诚然,在Symfony中使用表单主题既不容易,也没有完整的文档记录。但一旦你抓住了机会,你就会觉得这是解决这些问题的更好办法。