#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'));