Параметр schemes атрибута Route
Параметр schemes атрибута Route
задаёт список схем URL, по которым доступен
маршрут. Если запрос приходит по схеме, которой
нет в этом списке, Symfony не сопоставит его с
маршрутом и вернёт ошибку 404. Чаще всего
параметр используют, чтобы принудительно
ограничить маршрут только схемой https.
Принимает строку или массив строк.
Синтаксис
#[Route(path, name: name, schemes: ['https'])]
Пример
Давайте ограничим маршрут только схемой https:
<?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', name: 'article_index', schemes: ['https'])]
public function index(): Response
{
return new Response('hello');
}
}
?>
Запрос по адресу https://example.com/article
вернёт ответ:
hello
А запрос по адресу http://example.com/article
завершится ошибкой 404, потому что схема http
не входит в список разрешённых.
Пример
Давайте разрешим сразу две схемы - http и https:
<?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', name: 'article_user', schemes: ['http', 'https'])]
public function user(): Response
{
return new Response('user');
}
}
?>
Теперь маршрут доступен по обеим схемам.
Пример
Давайте передадим одну схему строкой, а не массивом:
<?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('/abcde', name: 'article_abcde', schemes: 'https')]
public function abcde(): Response
{
return new Response('abcde');
}
}
?>
Результат выполнения кода для адреса
https://example.com/abcde:
abcde