Enxiro
Новичок
Привет.
Я новичек в Симфони. Судя по руководствам можно описать правила валидации для Entity и проверять в контроллере вот так:
Но если сущность создается при помощи формы, то предлагают описать валидаторы непосредственно для формы и проверять ее в контроллере так:
Вопросы:
Почему при вызове persist не вызываются валидаторы для Entity? ведь во втором примере может сложиться ситуация что скажем я неправильно описал валидаторы для формы, или забыл какое-то поле в форме вывести, а оно у меня по логике приложения обязательное.
Да и вообще зачем мне 2 раза описывать одни и те же правила валидации сперва для Entity а потом для Формы?
Нашел кстати пример где можно навешать на события PrePersist и PreUpdate вызов валидации и в случае ошибки выкидывать исключение. Но правильно ли внедрить такую логику или где-то встречусь с подводными камнями?
Я новичек в Симфони. Судя по руководствам можно описать правила валидации для Entity и проверять в контроллере вот так:
Код:
$validator = $this->get('validator');
$errors = $validator->validate($job);
if (count($errors) > 0) {
/*
* Uses a __toString method on the $errors variable which is a
* ConstraintViolationList object. This gives us a nice string
* for debugging.
*/
$errorsString = (string) $errors;
return new Response($errorsString);
}
Код:
$entity = new Job();
$request = $this->getRequest();
$form = $this->createForm(new JobType(), $entity);
$form->submit($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
Почему при вызове persist не вызываются валидаторы для Entity? ведь во втором примере может сложиться ситуация что скажем я неправильно описал валидаторы для формы, или забыл какое-то поле в форме вывести, а оно у меня по логике приложения обязательное.
Да и вообще зачем мне 2 раза описывать одни и те же правила валидации сперва для Entity а потом для Формы?
Нашел кстати пример где можно навешать на события PrePersist и PreUpdate вызов валидации и в случае ошибки выкидывать исключение. Но правильно ли внедрить такую логику или где-то встречусь с подводными камнями?