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

Константа CATCH_ALL класса Requirement

Константа CATCH_ALL класса Requirement содержит регулярное выражение '.+', которое разрешает любые символы в значении параметра маршрута. Используется в параметре requirements атрибута Route, когда нужно разрешить передачу произвольных символов, включая слеши. По умолчанию Symfony не разрешает слеши в параметрах маршрута, поэтому данная константа применяется для маршрутов, принимающих произвольный путь.

Синтаксис

Requirement::CATCH_ALL

Пример

Давайте создадим маршрут, который принимает произвольный путь в параметре path:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Requirement\Requirement; class ArticleController extends AbstractController { #[Route('/files/{path}', name: 'article_files', requirements: ['path' => Requirement::CATCH_ALL])] public function files(string $path): Response { return new Response($path); } } ?>

Результат выполнения кода для адреса /files/docs/readme.txt:

docs/readme.txt

Пример

Давайте сравним поведение маршрута без CATCH_ALL и с ним:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Routing\Requirement\Requirement; class ArticleController extends AbstractController { #[Route('/page/{slug}', name: 'article_page')] public function page(string $slug): Response { return new Response($slug); } #[Route('/any/{slug}', name: 'article_any', requirements: ['slug' => Requirement::CATCH_ALL])] public function any(string $slug): Response { return new Response($slug); } } ?>

Адрес /page/abcde вернёт строку "abcde", а адрес /page/abc/de вернёт ошибку 404, так как слеш не разрешён. При этом адрес /any/abc/de вернёт строку "abc/de", потому что CATCH_ALL разрешает любые символы.

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

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