Symfony 2.6 表单验证和错误消息
Symfony 2.6 form validation and error messages
我对 Symfony 还很陌生。我已经编写了以下代码来验证,如果验证失败,则会显示 return 错误消息。但是我只能得到错误消息,而不能得到验证失败的字段。下面是我的代码:
if ($request->isXmlHttpRequest()) {
if ($form->isValid()) {
//do something here
}
$errors = $this->get('my_form')->getErrorMessages($form);
return new JsonResponse(['errors' => $errors], 400);
}
谁能告诉我怎样才能同时获得字段名称和错误消息。
谢谢
为了获取表单的所有错误,请使用 $form->getErrors($deep=true, $flatten=true)
,因此将错误转换为以名称作为字段名称、键作为消息的数组,类似于:
$errors = $form->getErrors(true, true);
$errorArray = array();
foreach($errors as $e){
//get the field that caused the error
$field = $e->getOrigin();
$errorArray[$field->getName()] = isset($errorArray[$field->getName()]) ? $errorArray[$field->getName()] : array();
$errorArray[$field->getName()][] = $e->getMessage();
}
这是我使用的函数:
/**
* Get errors from form.
*
* @param \Symfony\Component\Form\FormInterface $form
* @return array
*/
private function getErrorsFromForm(FormInterface $form)
{
$errors = array();
foreach ($form->getErrors() as $error) {
$errors[] = $error->getMessage();
}
foreach ($form->all() as $childForm) {
if ($childForm instanceof FormInterface) {
if ($childErrors = $this->getErrorsFromForm($childForm)) {
$errors[$childForm->getName()] = $childErrors;
}
}
}
return $errors;
}
我对 Symfony 还很陌生。我已经编写了以下代码来验证,如果验证失败,则会显示 return 错误消息。但是我只能得到错误消息,而不能得到验证失败的字段。下面是我的代码:
if ($request->isXmlHttpRequest()) {
if ($form->isValid()) {
//do something here
}
$errors = $this->get('my_form')->getErrorMessages($form);
return new JsonResponse(['errors' => $errors], 400);
}
谁能告诉我怎样才能同时获得字段名称和错误消息。
谢谢
为了获取表单的所有错误,请使用 $form->getErrors($deep=true, $flatten=true)
,因此将错误转换为以名称作为字段名称、键作为消息的数组,类似于:
$errors = $form->getErrors(true, true);
$errorArray = array();
foreach($errors as $e){
//get the field that caused the error
$field = $e->getOrigin();
$errorArray[$field->getName()] = isset($errorArray[$field->getName()]) ? $errorArray[$field->getName()] : array();
$errorArray[$field->getName()][] = $e->getMessage();
}
这是我使用的函数:
/**
* Get errors from form.
*
* @param \Symfony\Component\Form\FormInterface $form
* @return array
*/
private function getErrorsFromForm(FormInterface $form)
{
$errors = array();
foreach ($form->getErrors() as $error) {
$errors[] = $error->getMessage();
}
foreach ($form->all() as $childForm) {
if ($childForm instanceof FormInterface) {
if ($childErrors = $this->getErrorsFromForm($childForm)) {
$errors[$childForm->getName()] = $childErrors;
}
}
}
return $errors;
}