Метод getErrors класса Form
Метод getErrors класса Form возвращает массив ошибок,
возникших при валидации формы или её отдельных полей.
Метод не принимает обязательных параметров и возвращает
коллекцию объектов FormError. Ошибки появляются после
вызова метода submit, если переданные данные не прошли
проверку ограничениями валидации.
Каждый объект FormError содержит сообщение об ошибке,
которое можно получить через метод getMessage.
Если форма не отправлялась или данные корректны, метод
возвращает пустой массив.
Синтаксис
$form->getErrors()
Пример
Давайте создадим форму с ограничением NotBlank и посмотрим,
какие ошибки вернёт метод getErrors при пустом значении:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\HttpFoundation\Request;
class FormController extends AbstractController
{
public function index(Request $request): Response
{
$builder = $this->createFormBuilder();
$builder->add('title', TextType::class, [
'constraints' => [
new NotBlank(),
],
]);
$builder->add('send', SubmitType::class);
$form = $builder->getForm();
$form->submit(['title' => '']);
$res = [];
foreach ($form->getErrors() as $error) {
$res[] = $error->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["This value should not be blank."]
Пример
Давайте отправим корректные данные и убедимся, что массив ошибок пуст:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Validator\Constraints\NotBlank;
class FormController extends AbstractController
{
public function index(): Response
{
$builder = $this->createFormBuilder();
$builder->add('title', TextType::class, [
'constraints' => [
new NotBlank(),
],
]);
$builder->add('send', SubmitType::class);
$form = $builder->getForm();
$form->submit(['title' => 'abcde']);
$res = [];
foreach ($form->getErrors() as $error) {
$res[] = $error->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[]
Пример
Давайте получим ошибки не всей формы, а конкретного поля
через метод get, а затем вызовем у него getErrors:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Validator\Constraints\Length;
class FormController extends AbstractController
{
public function index(): Response
{
$builder = $this->createFormBuilder();
$builder->add('title', TextType::class, [
'constraints' => [
new Length(['min' => 5]),
],
]);
$builder->add('send', SubmitType::class);
$form = $builder->getForm();
$form->submit(['title' => 'ab']);
$res = [];
foreach ($form->get('title')->getErrors() as $error) {
$res[] = $error->getMessage();
}
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
["This value is too short. It should have 5 characters or more."]