1

検証ルールのセットを含むフィールドがあります。

/**
 * @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を送信すると、エラーメッセージが1つだけ表示されます。

Options
- This value should not be blank.

テンプレートに1つのエラーメッセージのみが表示される「スイッチ」はありますか?フォームのフィールドごとに1つのエラーメッセージのみを表示したいと思います。

======編集======
解決策BernhardSchussekPattが気に入っ
ています

4

1 に答える 1

2

1つのオプションは、フォームエラーブロックアプリケーション全体のテンプレート/ブロックを変更することです(テンプレート内のすべてのフォームが目的の動作を取得できるようにします)。または、テンプレートごとにフォームレイアウトを上書きします。

Symfony標準版に付属しているデフォルトのフォームレイアウトを見ると、 273行目にform_errors小枝blockが定義されていることがわかります。

(ドキュメントに従って)特定のテンプレートでこのブロックをオーバーライドして、errors配列から1つの要素のみをエコーすることができます。

{# 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 %}
于 2013-02-10T01:15:14.297 に答える