Константа 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