Symfony2表单验证 - 如何仅显示每个字段的第一条错误消息

时间:2013-02-10 01:02:25

标签: forms validation symfony

我有一组包含验证规则的字段:

/**
 * @var integer
 *
 * @ORM\Column(name="options", type="integer")
 * @Assert\NotBlank()
 * @Assert\Min(limit = "1381", message = "Please provide number higher than 1381")
 * @Assert\Regex(pattern = "/^\d{4}$/" , message = "Four digits are expected")
 */
private $options;

似乎有时Symfony正在检查每个断言(什么是好的)并在视图中呈现每个错误(不期望的是什么)。提交带有option = 5的表单后,我在视图中收到了以下错误消息。

Options
- Please provide number higher than 1381
- Four digits are expected

但是当我发送option = null时,只显示一条错误消息。

Options
- This value should not be blank.

是否有'switch'导致模板中只呈现一条错误消息?我想在表单中每个字段只有一条错误消息。

======编辑======
Solution I like作者:Bernhard Schussek 帕特感谢你指点我

1 个答案:

答案 0 :(得分:2)

一个选项是修改表单错误块application wide的模板/块(以便模板中的每个表单都能获得所需的行为)。或覆盖per template basis上的表单布局。

如果您去查看Symfony标准版随附的default form layout,您可以在line 273上看到form_errors树枝block已定义。

您可以在给定模板中覆盖此块(根据文档),仅回显errors数组中的一个元素:

{# SomeTemplate:Default:index.html.twig #}
{% extends '::base.html.twig' %}

{% form_theme form _self %}

{% block form_errors %}
{% spaceless %}
    {% if errors|length > 0 %}
    {{ errors[0].message }}
    {% endif %}
{% endspaceless %}
{% endblock form_errors %}

{% block content %}
    {# ... render the form #}

    {{ form_rest(form) }}
{% endblock %}