Используя 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() ) );