Проверка формы перед отправкой

Используя Symfony, версию 2.3 и более позднюю, я хочу, чтобы пользователь щелкнул ссылку, чтобы перейти на страницу редактирования уже существующего объекта, и что форма, которая отображается, уже проверена, с каждой ошибкой, связанной с ее соответствующим полем, т.е. я хочу, чтобы форма была подтверждена до отправки формы.

Я последовал за этой записью поваренной книги :

$form = $this->container->get('form.factory')->create(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group')); $form->submit($request->request->get($form->getName())); if ($form->isValid()) { ... } 

Но форма не заполняется данными сущности: все поля пустые. Я попытался заменить $request->request->get($form->getName()) на $myEntity , но это вызвало исключение:

$ myEntity не может использоваться как массив в Symfony / Component / Form / Extension / Csrf / EventListener / CsrfValidationListener.php

Кто-нибудь знает метод подачи метода отправки с правильно отформатированными данными, чтобы я мог достичь своей цели? Примечание. Я не хочу, чтобы Javascript был задействован.

На месте:

 $form->submit($request->request->get($form->getName())); 

Пытаться:

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

Вам необходимо привязать запрос к форме, чтобы заполнить форму представленными значениями, используя: $form->bind($request);

Вот подробное объяснение того, как выглядит ваш код:

 //Create the form (you can directly use the method createForm() in your controller, it's a shortcut to $this->get('form.factory')->create() ) $form = $this->createForm(new MyEntityFormType, $myEntity, array('validation_groups' => 'my_validation_group')); // Perform validation if post has been submitted (ie detection of HTTP POST method) if($request->isMethod('POST')){ // Bind the request to the form $form->bind($request); // Check if form is valid if($form->isValid()){ // ... do your magic ... } } // Generate your page with the form inside return $this->render('YourBundle:yourview.html.twig', array('form' => $form->createView() ) );