РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
334 of 1361 menu

Правило 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,
    которое валидирует коллекцию элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить