我有以下问题。我使用Symfony Forms来验证JSON请求,这也很有用。但我也会以更加Json可读的方式抛出错误。
我是否可以从FormErrorIterator FormError获取相关字段名称的每个错误。
例如:
formName.SubForm.Propertyname => 'MyErrorMessage'
路径的结构也可以是数组。
答案 0 :(得分: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将包含一系列错误,如果字段有错误,则字段名称将用作数组中的键:
$ errors [' FIELD_NAME'] = ERROR_MSG。
根据您的Symfony版本,您可能需要或想要此方法的其他版本:Symfony2 : How to get form validation errors after binding the request to the form。
<强>更新强>
如果您的validation constraints位于Entity类的字段上,它们将位于errors数组中,并带有基于字段名称的键。
如果您的验证限制在Entity类上,则将使用#键或数字键,具体取决于表单是否为root。
实体类示例
/**
* @Assert\Callback("isValidName") <- this error will be in $errors['#']
*/
class Author
{
/**
* @Assert\NotBlank() <- this error will be in $errors['firstname']
*/
public $firstname;
}
如果您只希望在字段上出现错误,则需要在Entity字段上移动所有Entity类断言。