Использую в контроллере форму унаследованную от Symfony\Component\Form\AbstractType
. Хочу как-то получить список ошибок валидации. Там есть метод getErrors
, но он возвращает их в каком-то очень странном виде... Итератор из объектов в которых по сути ценного только сообщение об ошибке. Понять же к какому полю оно относится никакой возможности не нашел...
P.S. Хочу получить простой массив типа ['field1' => 'error1', 'field2' => 'error2']
.
Дописать дополнительные функции, которые рекурсивно обходят форму и возвращает список ошибок в виде массива. Надо отметить, что массив может быть вложенным. Например если тип формы предназначен для работы с множественными элементами (массив, коллекция и т.д.) когда ошибку может выдать сам элемент, либо любой из множества дочерних.
public function createAction(Request $request): JsonResponse
{
...
$form->submit($requestData);
if ($form->isSubmitted() && $form->isValid()) {
...
} else {
// получаем список ошибок в виде массива
$validateErrors = $this->getErrorMessages($form);
}
}
/**
* Получение ошибок формы в виде массива 'поле' => 'строка ошибки'
*
* @param FormInterface $form
*
* @return array|string
*/
public function getErrorMessages(FormInterface $form)
{
$arErrors = [];
$formErrors = $form->getErrors(true, false);
foreach ($formErrors as $formError) {
if ($formError instanceof FormErrorIterator) {
$subForm = $formError->getForm();
$key = $subForm->getName();
$subErrors = $this->getErrorSubMessages($subForm);
$arErrors[$key] = $subErrors;
} else {
$key = $formError->getOrigin()->getName();
$arErrors[$key] = $formError->getMessage();
}
}
return $arErrors;
}
protected function getErrorSubMessages(FormInterface $form)
{
$arErrors = [];
$formErrors = $form->getErrors(true, false);
foreach ($formErrors as $formError) {
if ($formError instanceof FormErrorIterator) {
$subForm = $formError->getForm();
$key = $subForm->getName();
$subErrors = $this->getErrorSubMessages($subForm);
$arErrors[$key] = $subErrors;
} else {
return $formError->getMessage();
}
}
return $arErrors;
}
function myArray() {
return ['field1' => 'error1', 'field2' => 'error2'];
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня на PHP приходят данные, и я пока не знаю какиеЗадача понять число ли это или нет
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах