AnisimovAM
@AnisimovAM
Программист

Почему не отправляется форма в Symfony 3?

На страницу рендерится форма через твиговский тег
{{ render(controller('AppBundle:Device:formSelectedDevice')) }}


Код формы:
<?php

namespace AppBundle\Form;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class SelectedDeviceType extends EntityBaseType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('device', EntityType::class, array(
                'label' => 'Выберите прибор',
                'class' => 'AppBundle\Entity\Device',
                'empty_data' => $options['data']['device']
            ))
        ;
    }
    
    /**
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
    }
}


Код экшена в контроллере:

public function formSelectedDeviceAction(Request $request)
    {
        $selectedDeviceId = $request->getSession()->get('device') ?: 1;

        $data = array();
        $data['device'] = $this->service->getEntity($selectedDeviceId);

        $form = $this->createForm(SelectedDeviceType::class, $data);
        $form->handleRequest($request);

        if($form->isValid()) {
            dump($form->getData());
            $request->getSession()->set('device', $form->getData()['device']->getId());
        }

        return $this->render('AppBundle:Device/block:selected-device.html.twig', array(
            'form' => $form->createView()
        ));
    }


Условие isValid не выполняется при отправке формы,
Условие isSubmitted не выполняется при отправке формы.

Подскажите, в чем проблема?
  • Вопрос задан
  • 459 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Условие isSubmitted не выполняется при отправке формы.

Похоже что отправляете форму GET-ом, а $form->handleRequest($request); ждет POST-запрос.
Либо укажите метод явно
$this->createForm(SelectedDeviceType::class, $data, array(
    'method' => 'GET'
));

либо отправляйте POST-ом

+ т.к. форма ренедрится через sub-request, то отправка идет на текущую страницу:
$this->createForm(SelectedDeviceType::class, $data, array(
    'action' => $this->generateUrl('form_submit_route');
));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Условие isValid не выполняется при отправке формы,

Получите список ошибок из формы и посмотрите, что не так.
Условие isSubmitted не выполняется при отправке формы.

Кнопку сабмита-то добавляли в форму?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы