Параметр condition атрибута Route
Параметр condition атрибута Route задаёт
дополнительное условие, которому должен соответствовать
текущий запрос. Если условие не выполняется, Symfony
пропускает данный маршрут и ищет следующий подходящий.
Значением параметра является строка с выражением на языке
ExpressionLanguage, например "context.getMethod() == 'GET'".
Синтаксис
#[Route(path, name: name, condition: condition)]
Пример
Давайте повесим метод контроллера на адрес '/user'
и разрешим его только для запросов с заголовком
'X-Custom' равным 'abcde':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UserController extends AbstractController
{
#[Route('/user', name: 'user_index', condition: "request.headers.get('X-Custom') == 'abcde'")]
public function index(): Response
{
return new Response('user');
}
}
?>
Результат выполнения кода при наличии заголовка:
"user"
Если заголовок не передан, маршрут не совпадёт и Symfony
вернёт ответ 404 Not Found.
Пример
Давайте ограничим маршрут только запросами с методом
POST и параметром id больше 10:
<?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', condition: "context.getMethod() == 'POST' and request.get('id') > 10")]
public function show(int $id): Response
{
return new Response('article ' . $id);
}
}
?>
Результат выполнения кода для POST-запроса на адрес
/article/15:
"article 15"
Для GET-запроса или при id равном 5
маршрут не сработает.
Смотрите также
-
атрибут
Route,
который вешает метод контроллера на URL -
параметр
requirements,
который задаёт регулярное выражение для параметра пути -
параметр
methods,
который ограничивает маршрут HTTP-методами -
параметр
priority,
который задаёт приоритет маршрута