Проверка формы Symfony 2.6 и сообщения об ошибках

Я довольно новичок в Symfony. Я написал приведенный ниже код для проверки и возврата сообщения об ошибке, если проверка не удалась. Но я смог получить только сообщение об ошибке, а не поле, которое не прошло проверку. Ниже мой код:

if ($request->isXmlHttpRequest()) {

if ($form->isValid()) {
//do something here
}

$errors = $this->get('my_form')->getErrorMessages($form);
return new JsonResponse(['errors' => $errors], 400);
}

Может кто-нибудь подскажите, пожалуйста, как мне также получить имя поля вместе с сообщением об ошибке.

Спасибо

2

Решение

Чтобы получить все ошибки формы, используйте $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();
}
2

Другие решения

Вот функция, которую я использую:

  /**
* 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;
}
1

По вопросам рекламы [email protected]