Как приделать валидацию к стандартному formtype?

Для добавления валидации к стандартному FormType в Symfony вам понадобится несколько шагов. Вот подробный гайд:

Шаг 1: Создание класса формы
Сначала вам нужно создать класс формы. Вы можете сделать это с помощью генератора Symfony или создать класс вручную. Вам также потребуется создать классы-модели или сущности для использования в форме.

Шаг 2: Определение валидаций
Для определения валидаций вы можете использовать аннотации, YAML-файлы или XML-файлы. В данном примере мы будем использовать аннотации.

Вы можете добавить валидацию для каждого поля формы. Например, если у вас есть поле "username" и вы хотите, чтобы оно было обязательным и имело минимальную длину, вы можете добавить следующую аннотацию к свойству сущности, которое используется в форме:

use SymfonyComponentValidatorConstraints as Assert;

...

/**
 * @AssertNotBlank()
 * @AssertLength(min=3)
 */
private $username;

В этом примере мы использовали две аннотации: @AssertNotBlank() говорит о том, что поле не должно быть пустым, а @AssertLength(min=3) говорит о том, что поле должно иметь минимальную длину равную 3 символам.

Шаг 3: Добавление валидатора к форме
Теперь вам нужно добавить валидатор к классу формы. Вы можете сделать это в методе configureOptions() вашего класса формы.

use SymfonyComponentOptionsResolverOptionsResolver;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentValidatorValidation;
use SymfonyComponentValidatorConstraintsValid;

class MyFormType extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'constraints' => new Valid(),
        ]);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username')
            // другие поля формы
        ;
    }

    // другие методы класса
}

В этом примере мы добавили ограничение Valid(), которое говорит о том, что все поля формы должны проходить валидацию, определенную в классе-модели или сущности.

Шаг 4: Обработка ошибок валидации
Теперь, когда вы настроили валидацию, вам нужно обработать ошибки валидации в вашем контроллере или в другом месте, где вы обрабатываете отправку данных формы.

use SymfonyComponentValidatorValidatorValidatorInterface;

// ...

class MyController extends AbstractController
{
    public function submitForm(Request $request, ValidatorInterface $validator)
    {
        $form = $this->createForm(MyFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // обработка действий при корректной отправке формы
        } else {
            $errors = $validator->validate($form);
            // обработка ошибок валидации
        }

        // ...
    }

    // ...
}

В этом примере мы используем сервис ValidatorInterface для проверки валидации формы и получения списка ошибок. Затем мы можем обработать ошибки по своему усмотрению.

Вот и всё. Теперь у вас есть подробный гайд по добавлению валидации к стандартному FormType в Symfony. Надеюсь, это поможет вам в вашем проекте!