В Symfony 3.4 для выполнения валидации формы можно использовать компонент валидации Symfony Validator.
Первым шагом следует убедиться, что компонент Symfony Validator установлен в вашем проекте. Если компонент не установлен, выполните команду composer require symfony/validator
, чтобы добавить его в зависимости.
После установки компонента Symfony Validator создайте класс формы, наследующийся от SymfonyComponentFormAbstractType. Добавьте необходимые поля для формы и определите метод buildForm, где вы можете настроить каждое поле формы и добавить валидаторы.
Например, у нас есть форма с одним полем email, которое должно быть обязательным и соответствовать формату электронной почты. Для этого добавим валидацию в классе формы:
use SymfonyComponentFormAbstractType; use SymfonyComponentFormExtensionCoreTypeEmailType; use SymfonyComponentFormFormBuilderInterface; use SymfonyComponentOptionsResolverOptionsResolver; use SymfonyComponentValidatorConstraintsEmail; use SymfonyComponentValidatorConstraintsNotBlank; class MyFormType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('email', EmailType::class, [ 'constraints' => [ new NotBlank(), new Email(), ], ]); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => 'AppBundleEntityMyEntity', ]); } }
Здесь мы использовали два валидатора: NotBlank и Email из компонента Symfony Validator. NotBlank проверяет, что поле не пустое, а Email проверяет, что значение поля соответствует формату электронной почты.
После создания класса формы вы можете использовать его в вашем контроллере для обработки запросов и выполнения валидации:
use AppBundleEntityMyEntity; use AppBundleFormMyFormType; use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentHttpFoundationRequest; class MyController extends Controller { public function myAction(Request $request) { $myEntity = new MyEntity(); $form = $this->createForm(MyFormType::class, $myEntity); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // Обработка формы при успешной валидации } // Вывод формы в представлении return $this->render('my_template.html.twig', [ 'form' => $form->createView(), ]); } }
В вашем представлении (my_template.html.twig) вы можете отобразить форму с помощью функции form_widget:
{{ form_start(form) }} {{ form_widget(form.email) }} {{ form_errors(form.email) }} {{ form_rest(form) }} <button type="submit">Submit</button> {{ form_end(form) }}
Здесь мы используем функции form_start, form_widget, form_errors, form_rest для отображения формы и сообщений об ошибках.