@maximrabotaet

Как провалидировать ajax форму и получить ошибки в symfony?

Здравствуйте!
Форма регистрации рендерится реактом и отправляется AJAXзапросом, но после как я делаю $form->submit(...), то $form->getErrors() не возвращается никаких ошибок, хотя $form->isValid() === false. Если рендерить форму $form->createView(); то все работает.

Вопросы:
1. Как можно провалидировать форму не создавая своего валидатора при ajax запросе, форма ренедерится реактом, а не $form->createView();
2. Как можно сгенерировать Symfony\Component\HttpFoundation\Request чтобы прокинуть его в $form->handleRequest($request); на основе данных которые приходят с AJAX-запросом, грубо говоря чтобы $request был такой же как при обычной отправки формы, когда форма рендерится сервером $form->createView().

Entity:
use Symfony\Component\Validator\Constraints as Assert;

class RegisterData
{
    /**
     * @var string
     * @Assert\NotBlank()
     * @Assert\Email()
     */
    public $email;
    /**
     * @var string
     * @Assert\NotBlank()
     * @Assert\Length(min=6)
     */
    public $password;
}


Форма:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class RegisterDataForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('email', Type\EmailType::class)
            ->add('password', Type\PasswordType::class)
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => RegisterData::class,
        ]);
    }
}


Контроллер:
public function request(Request $request, SignUp\Request\Handler $handler, Validator $validator): Response
{
    $data = new RegisterData();
    $form = $this->createForm(RegisterDataForm::class, $data, ['csrf_protection' => false]);

    if($request->isXmlHttpRequest()) {

        // $request->request->set($form->getName(), $request->request->all());
        // $form->handleRequest($request); // так тоже не работает
        $form->submit($request->request->all());

        // $form->isValid() === false 
        // $form->getErrors() - пустой 
        ...
    }
}


p.s. данные отправляются заведомо невалидными, с валидными все равботает.
  • Вопрос задан
  • 393 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы