Ошибки формы отображения Symfony из метода проверки

#php #validation #symfony #symfony2-forms

#php #проверка #symfony #symfony2-forms

Вопрос:

Поскольку я привык к Laravel, я попытался проверить формы в отдельном методе. Но я не знаю, как перенаправить обратно и отобразить ошибки. Основная проблема заключается в отображении ошибок. Лучшим сценарием было бы, если бы я мог установить ошибки из метода проверки и разрешить рендеринг ошибок формы по умолчанию в Symfony.

Я могу быть совершенно неправ в своем подходе, если это так, я надеюсь, что кто-нибудь сможет направить меня в правильном направлении.

Я создал метод для создания формы и отображения ее в twig

 /**
 * @Route("/form")
 * @Template("Bundle::form.html.twig")
 * @Method("GET")
 */
public function formAction(Request $request)
{
    $state = new State();

    $form = $this->createFormBuilder($state)
        ->add('name', TextType::class)
        ->add('save', SubmitType::class, array('label' => 'Submit'))
        ->getForm();

    return [
        'form' => $form->createView(),
    ];
}
  

И еще один метод проверки формы и перенаправления обратно при ошибке

 /**
 * @Route("/form")
 * @Method("POST")
 */
public function formAction(Request $request)
{
    $state = new State();

    $form = $this->createFormBuilder($state)
        ->add('name', TextType::class)
        ->add('save', SubmitType::class, array('label' => 'Submit'))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted()) {
        if (!$form->isValid()) {
            // How to pass errors?
            return $this->redirectTo('/form');
        }

        // ... Store State
    }

    // ... 
}
  

Комментарии:

1. В Symfony отображение, проверка и сохранение формы обычно выполняются только за одно действие.

2. У вас один и тот же код дважды, за исключением isValid() части. Сделайте все это за одно действие. Как здесь: symfony.com/doc/2.8/forms.html#handling-form-submissions

Ответ №1:

1) Проверьте это

2) если вы действительно хотите добавить ошибку от вашего контроллера:

 use SymfonyComponentFormFormError;
// ...
$form->get('name')->addError(new FormError('Wrong name you fool :p'));