2012-07-02 4 views
4

Я разрабатываю приложение Symfony2, которое использует несколько форм. Данные из форм сохраняются в MySQL db с использованием Doctrine2. Я установил некоторые ограничения для объектов, использующих аннотации Symfony. Теперь, когда пользователь не может ввести соответствующие данные в форму, он получает сообщение об ошибке, но когда я пытаюсь манипулировать теми же объектами, используя объект Command, я не получаю никаких исключений или ошибок вообще.Есть ли способ использовать проверки подлинности symfony2 как проверки доктрины?

Из документации, которую я прочитал, работа по проверке Symfony и Doctrine работает как отдельные механизмы, теперь ... есть ли способ заставить их работать как один? То, что я пытаюсь избежать, - это написать те же проверки для объектов сущности, чтобы использовать их в качестве проверки подлинности и бэкэнд. Благодарю.

ответ

11

Формы проверяются автоматически, когда вы вызываете $form->isValid(), но если вы хотите проверить объект за пределами формы, вам необходимо называть его вручную.

В вашем классе команд просто получите услугу validator и подтвердите свой объект, прежде чем вы его сохраните.

$validator = $this->container->get('validator'); 
$errors = $validator->validate($myEntity); 

if (count($errors) > 0) { 
    return new Response(print_r($errors, true)); 
} else { 
    return new Response('The entity is valid!'); 
} 

Больше в документации здесь http://symfony.com/doc/master/book/validation.html#using-the-validator-service

+1

Я думаю, это помогает упомянуть, что компонент формы внутренне вызывает службу проверки. То есть они оба работают из одной конфигурации. –

+0

Понятно, что это просто разочарование в том, чтобы либо явно вызвать проверку, либо дважды написать правила проверки (И вызвать его явно при сохранении объектов) ... – Muc

+1

Я полагаю, вы могли бы добавить прослушиватель событий в doctrine для проверки всех объектов прежде чем они будут сохранены. Но в противном случае я не уверен, как вы ожидаете, что он «автоматически» проверяет, не обрабатывая его самостоятельно. В любом случае вам не придется писать валидацию дважды. – MDrollette

Смежные вопросы