Новое в Symfony 5.3: Runtime компонент

Symfony 5.3 был выпущен 31 мая 2021 года. Хотя было опубликовано много статей о новых функциях Symfony 5.3, есть некоторые интересные новые функции, которые еще не обсуждали. Первый — это новый компонент среды выполнения.

Назначение компонента Runtime — абстрагировать большую часть логики начальной загрузки приложения в так называемые среды выполнения, что позволяет вам писать общие фронт-контроллеры. Это упростит поддержку приложений Symfony, поскольку код фронт-контроллера может быть перемещен в рецепт Symfony Flex, управляемый Symfony автоматически.

Кроме того, этот компонент отделяет загрузку от любого глобального состояния, чтобы приложение могло работать с такими средами выполнения, как PHP-FPM, ReactPHP, Swoole и т. д., Без каких-либо изменений.

Если вы откроете файл public/index.php, вы увидите такой код:

// public/index.php
bootEnv(dirname(__DIR__).'/.env');

if ($_SERVER['APP_DEBUG']) {
    umask(0000);
    Debug::enable();
}

$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

В дополнение к некоторой автозагрузке и настройке, этот файл содержит код, необходимый для обработки хорошо известного потока запросов-ответов Symfony. В новом приложении Symfony 5.3 тот же фронт-контроллер использует Symfony Runtime, и его код выглядит следующим образом:

// public/index.php

Почему новый код фронт-контроллера такой лаконичный? Где запрос превратился в ответ? Что это за файл autoload_runtime.php? Прочтите новую документацию по компонентам среды выполнения, чтобы узнать обо всем этом и многом другом. Вы также узнаете, как настроить эту среду выполнения и как создавать свои собственные среды выполнения.

Если вы обновляете существующее приложение до Symfony 5.3, вы можете начать использовать этот новый компонент следующим образом:

  • Установите компонент, запустив composer require symfony/runtime
  • Обновите свой фронт-контроллер, используя код public/index.php из рецепта Symfony FrameworkBundle.
  • Обновите скрипт консоли, используя код bin/console из рецепта консоли Symfony.