2015-03-13 85 views
0

我有以下问题。我使用Symfony Forms来验证JSON请求,这也很棒。但我也会以更多的Json可读的方式抛出错误。Symfony窗​​体错误呈现

是否有可能从FormErrorIterator FormError获取每个错误的相关字段名称。

例如:

formName.SubForm.Propertyname => 'MyErrorMessage' 

路径的结构可以是也数组。

回答

1

如果你想获取一个数组的形式的错误,你可以添加在你的控制器使用方法:

private function getErrorMessages(\Symfony\Component\Form\Form $form) { 
    $errors = array(); 

    foreach ($form->getErrors() as $key => $error) { 
     if ($form->isRoot()) { 
      $errors['#'][] = $error->getMessage(); 
     } else { 
      $errors[] = $error->getMessage(); 
     } 
    } 

    foreach ($form->all() as $child) { 
     if (!$child->isValid()) { 
      $errors[$child->getName()] = $this->getErrorMessages($child); 
     } 
    } 

    return $errors; 
} 

$错误将包含错误的数组,如果一个字段有错误字段名称将用作数组中的键:

$ errors ['FIELD_NAME'] = ERROR_MSG。

根据您的Symfony版本,您可能需要或想要此方法的其他版本:Symfony2 : How to get form validation errors after binding the request to the form

UPDATE

如果您validation constraints是对实体类的字段,他们将是错误的阵列基于字段名的键英寸

如果您的验证约束条件在实体类上,则它将在#键或数字键中,具体取决于表单是否为根。

实体类的例子

/** 
* @Assert\Callback("isValidName") <- this error will be in $errors['#'] 
*/ 
class Author 
{ 
    /** 
    * @Assert\NotBlank() <- this error will be in $errors['firstname'] 
    */ 
    public $firstname; 
} 

如果您想对字段仅错误,你需要将所有的实体领域的实体类断言。

+0

这似乎更多的评论。您需要向提问者询问是否要从参考链接中提取更具体(且有用)的答案,以便在此处进行报告。 – 2015-03-13 18:30:12

+0

我已经更新了关于您的评论的答案,它应该更准确。 – HypeR 2015-03-13 19:29:45

+0

干得好,现在它是一个答案:-)。 – 2015-03-13 19:43:49