2014-01-16 3 views
2

У меня очень длинная форма заказа, которая позволяет экономить сквозняки. Если сохранить как черновик, требуется только имя заказа, но при фактическом размещении заказа требуется более тщательная проверка. Я реализовал это, используя различные группы проверки. При редактировании заказа отображаются две кнопки: «Сохранить черновик» и «Порядок размещения». Каждый из них выполняет проверку с использованием другой группы проверки.Как я могу активировать проверку формы без привязки запроса?

Но теперь я хотел бы сделать кнопку в списке заказов, которая позволяет изменять статус заказа из «черновика» в «помещенный» напрямую. Для этого валидация должна выполняться без отображения формы редактирования и отправки ее. Я просто хотел бы проверить объект, который уже находится в базе данных. Я могу использовать службу валидатора, и все просто, пока данные действительны. Но если данные недействительны, я хотел бы перенаправить пользователя в форму редактирования с полями с недостающими данными. Идея, похоже, загружает данные из базы данных в форму и запускает проверку, как если бы эти данные были отправлены с помощью браузера, но выполнение этого не кажется тривиальным, поскольку Symfony2 запускает проверку на форме только при привязке запроса.

Я прошел через исходный код Symfony и нашел класс s, называемый Symfony \ Component \ Form \ Extension \ Validator \ EventListener \ ValidationListener. Кажется, он присоединяется к событию FormEvents :: POST_SUBMIT. Есть ли способ инициировать это событие вручную из контроллера без привязки запроса? Или есть альтернативные подходы к моей проблеме?

+0

Извините. Несмотря на то, что вы явно заявили, что не хотите связывать запрос, мой ответ по-прежнему требует от вас этого. Но я не вижу ничего плохого в моем решении. Вы можете связать запрос, даже если вы не вызывается из формы редактирования. – pagliuca

ответ

2

Просто, чтобы указать правильный ответ уже дали по Matjaž Drolc в комментариях:

Если вы хотите проверить форму без получения данных из запроса, вы должны вызвать функцию form->submit(), потому что Symfony делает не проверяйте поля, если они не отмечены как submitted, которые выполняются с помощью этой функции.

Вызов функции, как этот

$form->submit(array(), false); 

С пустой массив в качестве представленных данных и не очищая недостающие поля.

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