Twig form_errors函数不会在validators.lang.yml中加载转换消息

时间:2012-02-24 16:34:54

标签: php symfony doctrine doctrine-orm twig

我正在使用Symfony2翻译,以便在我的表单中显示错误消息。我的邮件位于我的捆绑包的validators.fr.yml子文件夹中的Ressources/translations中定义。我也在使用注释来设置要使用的消息。

问题是我的模板中没有显示该消息。我只获得了我在注释中定义的密钥。

我实体的代码示例:

/**
 * Nom du site de travail.
 *
 * @var string le nom du site de travail.
 *
 * @ORM\Column(
 *      name   = "nom",
 *      type   = "string",
 *      length = 255
 * )
 *
 * @Assert\NotBlank(message = "structure.siteTravail.nom.notnull")
 */
private $nom;

在我的表单类中,我使用getDefaultOptions选项实现了data_class方法(不知道它是否有帮助):

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'My\FreakingBundle\Entity\SiteTravail'
    );
}

以下是validators.fr.yml的内容:

structure:
    siteTravail:
        nom:
            notnull: Le nom est obligatoire.

在我的Twig模板中,我正在使用此代码来渲染字段的错误:

{{ form_errors(form.nom) }}

此外,翻译在app/config/config.yml

中激活
framework:
    translator: { fallback: fr }

我的所有翻译版本都在messages.fr.yml中完美地用于此捆绑包,我还有另一个捆绑包同时使用messages.fr.ymlvalidators.fr.yml

最奇怪的是,当我将validators.fr.yml的内容放入我的另一个捆绑包中时,它会起作用。

1 个答案:

答案 0 :(得分:0)

您可以强制翻译覆盖 field_errors 表单块。

因此,当您在树枝模板中渲染表单时:

{% form_theme form _self %}

{% block field_errors %}
{% spaceless %}
    {% if errors|length > 0 %}
        <ul>
            {% for error in errors %}
                <li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans }}</li>
            {% endfor %}
        </ul>
    {% endif %}
{% endspaceless %}
{% endblock %}

{% block content %}
    {# ... other stuffs ... #}
        {{ form_widget(form) }}
    {# ... other stuffs ... #}
{% endblock %}

如果您将翻译放在特定的域文件中(例如:“validators.lang.yml”),请使用以下语法:

<li>{{ error.messageTemplate|trans(error.messageParameters, 'validators')|trans({}, 'validators') }}</li>

您可以在此处找到用于自定义替换目的的所有默认表单块:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig