symfony Forms -- Создать форму - Валидация формы - Предзаполненные поля

Создание формы в Symfony может быть разным. Один из способов - создать директорию Type, и в ней класс MyFormType().

  • В нём следующий код (Здесь же делается валидация полей):
    <?php
    namespace AppBundle\Form;
    
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Symfony\Component\Form\Extension\Core\Type\SubmitType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\Validator\Constraints\Length;
    
    /**
     * Форма формирования квитанции
     */
    class CreatingBillType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options): void
        {
    // добавляем все необходимые поля, и их свойства. 
            $builder->add('rs', TextType::class, [
                    'attr'=> [
                        'placeholder' => 'Номер расчётного счёта',
                    ],
    // Здесь же происходит валидация полей, с помощью constraints
                    'constraints' => [
                        new Length([
                            'min' => 20,
                            'max' => 20,
                        ]),
                    ],
                ])
                ->add('bik', TextType::class, [
                    'attr'=> [
                        'placeholder' => 'БИК',
                    ],
                    'constraints' => [
                        new Regex([
                            'pattern'=> "/^0[0-9]{8}$/x"
                        ]),
                    ],
                ])
                ->add('inn', TextType::class, [
                    'attr'=> [
                        'placeholder' => 'ИНН',
                    ],
                    'constraints' => [
                        new Length([
                            'min' => 10,
                            'max' => 10,
                        ]),
                    ],
                ])
                ->add('submit', SubmitType::class, [
                    'label' => 'Создать',
                ]);
        } 
  • В контрллере (Здесь же видно как предзаполнить форму данными):
    /**
       * @Route("/creating-bill", name="creating_bill")
       * 
       * @param Request $request
       * 
       * @return Response
       */
    public function indexAction(Request $request): Response 
    {
         // создаём форму
         // Чтобы предзаполнить форму значениями из контроллера, передаём    значения вторым аргументом методу createForm()
         $form = $this->createForm(CreatingBillType::class, array $data);
    
         // так определяем, какие данные переданы нам в метод о форме
         $form->handleRequest($request);
    
         // проверка, была ли нажата кнопка Отправить и валидны ли данные
         if ($form->isSubmitted() && $form->isValid()) {
    
               // так достаём значения, которые ввёл пользователь
               $data = $form->getData();
    
               // далее код, обрабатывающий форму
         }
    
         // так печатаем форму
         return $this->render('registration/creating_bill.html.twig', [
                        'form' => $form->createView(),
                        'errors' => $form->getErrors(),
         ]);
    }

Источники

Формы Symfony: https://symfony.com/doc/current/forms.html
Регулярные выражения: http://www.php.su/articles/?cat=regexp&p...