Приветствую!
Есть сущность
class Meeting
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
//......и т. д.
}
и форма
class MeetingType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', TextType::class)
->add('desctiption', TextareaType::class)
->add('avatar', FileType::class)
->add('beginAt', IntegerType::class)
->add('createdAt', IntegerType::class)
->add('updatedAt', IntegerType::class)
->add('uid', IntegerType::class)
;
}
}
Данные отправляются XHR'ом, поэтому в контроллере все вот так:
public function createAction(Request $request)
{
$data = $request->request->all();
$formData = [
//... здесь заполнение в соответствии с моделью и преобразование некоторых полей
//... так же подцепляется CSRF токен
];
$form = $this->createForm(MeetingType::class, new Meeting);
$form->submit($formData);
if (!$form->isValid()) {
$errors = [];
foreach ($form->getErrors(true, false) as $key => $error) {
if (method_exists($error, 'getMessage')) {
$errors[] = $error->getMessage();
} else {
foreach ($error as $k => $e) {
$errors[] = $e->getMessage();
}
}
}
return new JsonResponse([
'success' => false,
'errors' => $errors,
'type' => 'form-validation',
]);
}
}
Проблемы следующие:
а) Если
getErrors(false), то форма
!isValid, но список ошибок пустой. Т. е. в плоский список почему-то ошибки не преобразуются.
б) Если я добавляю
constraints в сущность с помощью
loadValidatorMetadata, либо в качестве параметров полей в
MeetingType, это не работает.
в) Откуда-то взялись две ошибки
Значение не должно быть пустым, хотя
constraints не прописаны.
г) Никак не получается ассоциировать ошибки с определенными полями.
д) Почему-то
$error->getCause() вызывает зверский жор памяти и мертвое зависание всего сервера насовсем.
Очевидно, здесь есть много чего, что я не понимаю и делаю неправильно. Как все-таки организовать правильную валидацию полей на стороне сервера?