Symfony2,UniqueEntity约束消息未被翻译

时间:2014-02-10 16:28:08

标签: php symfony translation

我在documentation之后向我的实体添加了UniqueEntity约束。约束工作正常,我收到默认错误消息:

  

此值已被使用。

当我用unique_entity.message等翻译密钥替换消息并在validators.en.yml中添加此密钥(我成功地将其他断言翻译添加到该文件中)时,错误消息是翻译密钥本身而不是已翻译的消息。

我尝试清除缓存,但没有用。我尝试检查约束文件的源代码,但我在许多文件中丢失了,从我能找到的,它应该可以工作。

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

我找到了原因,我正在使用函数get获取错误列表,在json中对它们进行编码以使用ajax形式,这就是函数:

private function getFormErrorMessages(Form $form)
{
    $errors = array();

    foreach ($form->getErrors() as $key => $error) {
        $template = $error->getMessageTemplate();
        $parameters = $error->getMessageParameters();

        $error = $template;

        foreach ($parameters as $var => $value) {
            $error = str_replace($var, $value, $template);
        }

        $errors[] = array(
            'error' => $error,
            'template' => $template,
            'parameters' => $parameters,
        );
    }

    if ($form->count()) {
        foreach ($form as $child) {
            if (!$child->isValid()) {
                $errors = array_merge($errors, $this->getFormErrorMessages($child));
            }
        }
    }

    return $errors;
}

嗯,碰巧这个函数得到翻译的正常错误(来自Asserts),而不是UniqueEntity错误。也许在视图创建过程中似乎已经翻译了。

因此,我没有获取错误列表,而是返回包含json中错误的新呈现表单,并用它替换旧表单,并且所有错误都按照它们应该进行转换。