0

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

  // 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();

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

4

1 回答 1

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;
}
于 2012-11-27T09:58:42.610 回答