Правило All
Правило All используется в форме Symfony для валидации коллекций и массивов. Оно применяется к полю, значением которого является массив, и позволяет задать набор ограничений, которые будут проверены для каждого элемента этого массива. Правило принимает один обязательный параметр constraints - массив ограничений, применяемых к каждому элементу коллекции. Это особенно удобно при работе с полем типа CollectionType, когда нужно убедиться, что все вложенные элементы соответствуют определённым требованиям.
Синтаксис
#[All(
constraints: [
new NotBlank(),
new Length(min: 2, max: 255),
]
)]
Пример
Давайте создадим форму с полем items, которое принимает массив строк, и проверим каждый элемент на то, что он не пустой:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\NotBlank;
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('items', CollectionType::class, [
'entry_type' => TextType::class,
'allow_add' => true,
'constraints' => [
new All([
new NotBlank(),
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Если хотя бы один элемент массива окажется пустым, форма будет невалидна. Результат выполнения проверки для массива ['abcde', '', 'hello']:
[
'items[0]' => [],
'items[1]' => ['This value should not be blank.'],
'items[2]' => [],
]
Пример
Давайте применим несколько ограничений к каждому элементу коллекции - проверим, что элементы не пустые и имеют длину от 2 до 10 символов:
<?php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\All;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Length;
class ItemType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('items', CollectionType::class, [
'entry_type' => TextType::class,
'allow_add' => true,
'constraints' => [
new All([
new NotBlank(),
new Length(min: 2, max: 10),
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => null,
]);
}
}
?>
Результат выполнения проверки для массива ['a', 'abcde', 'hello world']:
[
'items[0]' => ['This value is too short. It should have 2 characters or more.'],
'items[1]' => [],
'items[2]' => ['This value is too long. It should have 10 characters or less.'],
]
Пример
Давайте применим правило All непосредственно к полю через опцию constraints внутри класса сущности:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Article
{
#[Assert\All([
new Assert\NotBlank(),
new Assert\Length(min: 2, max: 255),
])]
private array $tags = [];
public function getTags(): array
{
return $this->tags;
}
public function setTags(array $tags): void
{
$this->tags = $tags;
}
}
?>
Теперь при валидации сущности каждый тег будет проверен на непустоту и длину. Результат для ['abcde', '']:
[
'tags[0]' => [],
'tags[1]' => ['This value should not be blank.'],
]
Смотрите также
-
класс
Form,
который представляет форму в Symfony -
правило
NotBlank,
которое проверяет, что значение не пустое -
правило
Length,
которое проверяет длину строки -
правило
Collection,
которое валидирует коллекцию элементов