Symfony 5.1 добавляет важные новые функции, связанные с маршрутизацией, такие как приоритет для аннотаций маршрутов и более простая конфигурация маршрутов. В этой статье покажут другие незначительные, но интересные функции, добавленные в маршрутизацию.
Добавлен атрибут маршрута без состояния
Маршруты теперь могут настраивать логическую опцию stateless
. Если установлено значение true
, они объявляют, что сессии не будет использоваться во время обработки запроса.
Если маршрут без состояния будет использовать сесси, вы увидите исключение, когда отладка включена в приложении, и получите сообщение журнала, когда отладка отключена:
// src/Controller/MainController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MainController extends AbstractController
{
/**
* @Route("/", name="homepage", stateless=true)
*/
public function homepage()
{
// ...
}
}
Разрешить использование env vars в условиях маршрута
Условия маршрутизации определяют выражения, которым должны соответствовать маршруты. В Symfony 5.1 улучшили эти выражения, чтобы разрешить использование переменных среды.
При использовании env vars вы также можете применять любой из процессоров Symfony env var:
/**
* @Route("/new-feature", condition="env('bool:IS_FEATURE_ENABLED') === true")
*/
public function __invoke()
{
// this route will only execute when the value of the
// IS_FEATURE_ENABLED env var is TRUE
}
Более простая конфигурация RequestContext
Создание URL-адресов в консольных командах и в любом другом месте вне веб-контекста является сложной задачей, поскольку Symfony не имеет доступа к текущему хосту, базовому URL-адресу и т. д.
В этих случаях вам необходимо настроить контекст запроса, используя параметры контейнера, такие как router.request_context.host
. В Symfony 5.1 вы можете настроить эти значения с помощью параметра framework.router
:
# config/packages/routing.yaml
framework:
router:
# ...
host: 'example.org'
scheme: 'https'
base_url: 'my/path'