Класс Requirement
Класс Requirement используется внутри атрибута
Route в параметре requirements.
Он позволяет указать регулярное выражение, которому
должно соответствовать значение параметра маршрута.
Если значение не подходит под выражение, маршрут
не срабатывает и Symfony возвращает ошибку 404.
Класс также содержит готовые константы, такие как
DIGITS, UUID, ASCII_SLUG и другие,
чтобы не писать регулярные выражения вручную.
Синтаксис
#[Route(path, name: name, requirements: ['param' => Requirement::DIGITS])]
Пример
Давайте ограничим параметр id только цифрами:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentRoutingRequirement;
class ArticleController extends AbstractController
{
#[Route('/article/{id}', name: 'article_show', requirements: ['id' => Requirement::DIGITS])]
public function show(int $id): Response
{
return new Response((string) $id);
}
}
?>
Результат выполнения кода для адреса /article/123:
123
Результат выполнения кода для адреса /article/abcde:
404 Not Found
Пример
Давайте ограничим параметр slug с помощью
константы ASCII_SLUG:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentRoutingRequirement;
class ArticleController extends AbstractController
{
#[Route('/article/{slug}', name: 'article_slug', requirements: ['slug' => Requirement::ASCII_SLUG])]
public function slug(string $slug): Response
{
return new Response($slug);
}
}
?>
Результат выполнения кода для адреса /article/abcde:
abcde
Пример
Давайте зададим своё регулярное выражение вместо готовой константы:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'user_show', requirements: ['name' => '[a-z]+'])]
public function user(string $name): Response
{
return new Response($name);
}
}
?>
Результат выполнения кода для адреса /user/abcde:
abcde
Результат выполнения кода для адреса /user/12345:
404 Not Found
Смотрите также
-
параметр
requirements,
который задаёт ограничения для параметров маршрута -
константа
DIGITS,
которая разрешает только цифры -
константа
ASCII_SLUG,
которая разрешает символы ASCII-слага -
константа
UUID,
которая разрешает UUID-идентификаторы