Не отображаются ошибки валидации

template

         {{ form_start(form, {'action': path('update_customer', {id: customer.id}), 'method': 'PUT'}) }}
            <div class="my-custom-class-for-errors">
                {{ form_errors(form) }}
            </div>

        {{ form_widget(form) }}
        {#{form_widget(form._token)}#}
        {{ form_end(form) }}

Type

 public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('firstName', TextType::class, [
            'constraints' => [new Length(['min' => 3])]
        ])
        ->add('lastName', TextType::class)
        ->add('email', TextType::class)
        ->add('phoneNumber', TextType::class)
        ->add('save', SubmitType::class);

}

контроллер

   public function update($id, Request $request, ValidatorInterface $validator): RedirectResponse
{
    $firstName = $request->request->all()['customer']['firstName'];

    $submittedToken = $this->tokenManager->getToken('customer')->getValue();

    if ($this->isCsrfTokenValid('customer', $submittedToken)) {

        $customer = $this->customerRepository->findOneBy(['id' => $id]);

        empty($firstName) ? true : $customer->setFirstName($firstName);
        empty($request->request->all()['customer']['lastName']) ? true : $customer->setLastName($request->request->all()['customer']['lastName']);
        empty($request->request->all()['customer']['email']) ? true : $customer->setEmail($request->request->all()['customer']['email']);
        empty($request->request->all()['customer']['phoneNumber']) ? true : $customer->setPhoneNumber($request->request->all()['customer']['phoneNumber']);

        $this->customerRepository->updateCustomer($customer);

        return $this->redirectToRoute('all_customer');
    }

    throw new \Exception('Invalid token');
}

Не отображаются ошибки валидации в темплейте.


Ответы (1 шт):

Автор решения: UKRman

Как создать форму и про валидировать ее в symfony, документацыя:

MyController extends AbstractController
{

    /**
     * @Route("/test", name="test")
     * @param Request $request
     * @return Response
     */
    public function request(Request $request): Response
    {
        $command = new Command();

        $form = $this->createForm(Form::class, $command);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            try {
                //Ваш код связан с оброботкой класа Command

                return $this->redirectToRoute('home');
            } catch (\DomainException $e) {
                $this->addFlash('error', $e->getMessage());
            }
        }

        return $this->render('app/test.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

class Form extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder->add('firstName', TextType::class, [
            'constraints' => [new Length(['min' => 3])]
        ])
        ->add('lastName', TextType::class)
        ->add('email', TextType::class)
        ->add('phoneNumber', TextType::class);
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => Command::class,
        ]);
    }
}

class Command
{
    /**
     * @var string
     */
    public $firstName;
    /**
     * @var string
     */
    public $lastName;
    /**
     * @var string
     */
    public $email;
    /**
     * @var string
     */
    public $phoneNumber;
}
→ Ссылка