Не отображаются ошибки валидации
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;
}