Symfony 2.1 FOSUser翻译错误消息

时间:2012-10-21 07:02:06

标签: symfony symfony-2.1 fosuserbundle

我使用以下代码来获取表单中的所有错误:

  // get all the errors in the form in an array
  public static function getErrorMessages(\Symfony\Component\Form\Form $form) {
    $errors = array();

    // actual errors
    foreach ($form->getErrors() as $key => $error) {
        $errors[] = $error->getMessage();
    }

    // find children that are not valid
    if ($form->count()>0) {
        foreach ($form->all() as $child) {
            if (!$child->isValid()) { 
                $errors[$child->getName()] = formHelper::getErrorMessages($child);
            }
        }
    }

有效。唯一的问题是FOSUser:我已经定义了我的验证组,并且错误没有被翻译。而不是得到"密码太短"我得到" fos_user.password.short"。问题在于:

$errors[] = $error->getMessage();

这不会转换错误。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您应该使用翻译服务来翻译消息 试试这个:

public function getFormErrorsAssoc(FormInterface $form) {
    $errors = array();                                                                                                                                   
    /* @var \Symfony\Component\Form\FormError $error*/                                                                                                   
    foreach ($form->getErrors() as $key => $error) {                                                                                                     
        $message = $this->translator->trans($error->getMessageTemplate(), $error->getMessageParameters(), 'validators');
        if ($message) {
            $errors[$key] = $message;
        }
    }
    if ($form->hasChildren()) {
        /* @var FormInterface $child*/
        foreach ($form->getChildren() as $child) {
            $label = $child->getAttribute('label') ? : $child->getName();
            if (!$child->isValid()) {
                $errors[$label] = $this->getFormErrorsAssoc($child);
            }
        }
    }

    return $errors;
}