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

Параметр requirements атрибута Route

Параметр requirements атрибута Route задаёт ограничение на значение динамического сегмента URL. Передаётся массивом, где ключ - это имя параметра маршрута, а значение - регулярное выражение, которому должна соответствовать часть URL. Если URL не проходит проверку, маршрут не будет сопоставлен, и Symfony вернёт ошибку 404.

Этот параметр особенно полезен, когда нужно ограничить сегмент только цифрами, буквами или определённым форматом, чтобы избежать неоднозначности между похожими маршрутами.

Синтаксис

#[Route(path, name: name, requirements: ['param' => 'regexp'])]

Пример

Давайте ограничим параметр id так, чтобы он принимал только цифры:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show', requirements: ['id' => '\d+'])] public function show(int $id): Response { return new Response('article ' . $id); } } ?>

Результат выполнения кода для адреса /article/5:

"article 5"

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

"404 Not Found"

Пример

Давайте ограничим параметр slug только строчными буквами, цифрами и дефисом:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/{slug}', name: 'article_slug', requirements: ['slug' => '[a-z0-9-]+'])] public function slug(string $slug): Response { return new Response($slug); } } ?>

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

"abcde"

Результат выполнения кода для адреса /article/Abcde:

"404 Not Found"

Пример

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

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/user/{id}/{name}', name: 'article_user', requirements: ['id' => '\d+', 'name' => '[a-z]+'])] public function user(int $id, string $name): Response { return new Response($id . ' ' . $name); } } ?>

Результат выполнения кода для адреса /user/5/abcde:

"5 abcde"

Результат выполнения кода для адреса /user/abcde/5:

"404 Not Found"

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

  • атрибут Route,
    который вешает метод контроллера на URL
  • параметр path,
    который задаёт путь маршрута
  • параметр name,
    который задаёт имя маршрута
  • параметр defaults,
    который задаёт значения по умолчанию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить