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

Правило Expression

Правило Expression относится к секции form и вешается на поле формы. Оно проверяет значение поля с помощью выражения на языке ExpressionLanguage. Первым параметром передаётся строка выражения, в которой доступна переменная value - текущее значение поля. Вторым параметром можно передать массив values с дополнительными переменными для выражения.

Синтаксис

#[Expression(expression: 'expression', values: [])]

Пример

Давайте создадим форму с полем text и повесим на него правило Expression, требующее, чтобы значение было длиннее трёх символов:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Validator\Constraints\Expression; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('text', TextType::class, [ 'constraints' => [ new Expression( 'value.length > 3', ), ], ]); } } ?>

При отправке значения 'abcde' форма будет валидной, а при значении 'abc' - нет.

Пример

Давайте передадим дополнительную переменную через параметр values и сравним значение поля с ней:

<?php namespace App\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Validator\Constraints\Expression; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder->add('text', TextType::class, [ 'constraints' => [ new Expression( 'value == expected', ['expected' => 'abcde'], ), ], ]); } } ?>

При отправке значения 'abcde' форма будет валидной, при любом другом значении - нет.

Пример

Давайте обработаем форму в контроллере и выведем результат валидации:

<?php namespace App\Controller; use App\Form\ArticleType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_form')] public function form(Request $request): Response { $form = $this->createForm(ArticleType::class); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { return new Response('valid'); } return new Response('invalid'); } } ?>

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

valid

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

invalid

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

  • правило Regex,
    которое проверяет значение по регулярному выражению
  • правило NotBlank,
    которое требует непустое значение поля
  • правило Length,
    которое проверяет длину строки
  • правило Callback,
    которое проверяет значение через PHP-функцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить