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

Правило Count

Правило Count относится к группе ограничений валидации Symfony и применяется для проверки количества элементов в коллекции, массиве или объекте, реализующем интерфейс Countable. Правило вешается на свойство сущности или на поле формы. Первым параметром передаётся точное количество элементов, которое должно быть в коллекции. Также можно передать минимальное значение через опцию min и максимальное через опцию max. Если количество элементов не соответствует заданным ограничениям, валидация завершается ошибкой.

Синтаксис

#[Count( exactly: value, min: value, max: value, divisibleBy: value, minMessage: 'message', maxMessage: 'message', exactMessage: 'message', divisibleByMessage: 'message' )]

Пример

Давайте создадим сущность Article с полем tags, которое должно содержать ровно три элемента:

<?php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Article { #[Assert\Count( exactly: 3, exactMessage: 'The tags collection must contain exactly {{ limit }} elements.' )] private array $tags = []; public function getTags(): array { return $this->tags; } public function setTags(array $tags): self { $this->tags = $tags; return $this; } } ?>

Пример

Давайте проверим сущность с корректным количеством элементов:

<?php namespace App\Controller; use App\Entity\Article; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; class ArticleController extends AbstractController { #[Route('/article/validate', name: 'article_validate')] public function validate(ValidatorInterface $validator): Response { $article = new Article(); $article->setTags(['a', 'b', 'c']); $errors = $validator->validate($article); if (count($errors) > 0) { return new Response((string) $errors); } return new Response('valid'); } } ?>

Результат выполнения кода:

"valid"

Пример

Давайте проверим сущность с некорректным количеством элементов:

<?php namespace App\Controller; use App\Entity\Article; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Validator\Validator\ValidatorInterface; class ArticleController extends AbstractController { #[Route('/article/validate-invalid', name: 'article_validate_invalid')] public function validateInvalid(ValidatorInterface $validator): Response { $article = new Article(); $article->setTags(['a', 'b']); $errors = $validator->validate($article); if (count($errors) > 0) { return new Response((string) $errors); } return new Response('valid'); } } ?>

Результат выполнения кода:

"The tags collection must contain exactly 3 elements."

Пример

Давайте зададим минимальное и максимальное количество элементов через опции min и max:

<?php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Article { #[Assert\Count( min: 2, max: 5, minMessage: 'The tags collection must contain at least {{ limit }} elements.', maxMessage: 'The tags collection must contain at most {{ limit }} elements.' )] private array $tags = []; public function getTags(): array { return $this->tags; } public function setTags(array $tags): self { $this->tags = $tags; return $this; } } ?>

Пример

Давайте применим правило Count к полю формы через атрибут constraints:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Validator\Constraints\Count; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('tags', CollectionType::class, [ 'entry_type' => TextType::class, 'constraints' => [ new Count([ 'exactly' => 3, 'exactMessage' => 'The tags collection must contain exactly {{ limit }} elements.', ]), ], ]); } } ?>

Смотрите также

  • класс Form,
    который представляет форму в Symfony
  • метод isValid,
    который проверяет валидность формы
  • правило Length,
    которое проверяет длину строки
  • правило NotBlank,
    которое проверяет, что значение не пустое
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить