New in Symfony 5.3: Runtime Component

Contributed by
Nicolas Grekas
in #38465
and #40513.

Symfony 5.3 was released on May 31, 2021. Although we’ve published many
articles about new Symfony 5.3 features, there are some interesting new
features that we haven’t discussed yet. The first one is the new Runtime Component.

The purpose of the Runtime component is to abstract most of the application
bootstrapping logic into so-called runtimes, allowing you to write generic
front-controllers. This will make Symfony applications easier to maintain,
because the front-controller code can be moved to a Symfony Flex recipe
managed automatically by Symfony.

In addition, this component decouples the bootstrapping from any global state to
make sure the application can run with runtimes like PHP-FPM, ReactPHP, Swoole,
etc. without any changes.

If you open your public/index.php file, you’ll see some code like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// public/index.php
<?php

use AppKernel;
use SymfonyComponentDotenvDotenv;
use SymfonyComponentErrorHandlerDebug;
use SymfonyComponentHttpFoundationRequest;

require dirname(__DIR__).‚/vendor/autoload.php‘;

(new Dotenv())->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);

In addition to some autoloading and configuration, this file contains the code
needed to process the well-known Symfony Request-Response flow. In a new
Symfony 5.3 application, the same front-controller uses Symfony Runtime and its
code looks as follows:

1
2
3
4
5
6
7
8
9
10
// public/index.php
<?php

use AppKernel;

require_once dirname(__DIR__).‚/vendor/autoload_runtime.php‘;

return function (array $context) {
return new Kernel($context[‚APP_ENV‘], (bool) $context[‚APP_DEBUG‘]);
};

Why is the new front-controller code so concise? Where is the request turned
into a response? What’s this autoload_runtime.php file? Read the new
Runtime component docs to learn about all this and more. You will also
learn how to tweak this runtime and how to create your own runtimes.

If you are upgrading an existing application to Symfony 5.3, you can start using
this new component as follows:

Install the component by running composer require symfony/runtime
Update your front controller using the public/index.php code found in
Symfony’s FrameworkBundle recipe
Update your console script using the bin/console code found in Symfony’s
Console recipe

If you want to learn more about this component, join the
SymfonyWorld Online 2021 Summer Edition conference (June 17-18, 2021),
where Tobias Nyholm will deliver a talk titled “Runtime component: The game changer”.

Sponsor the Symfony project.

Symfony Blog
Read More

Latest News

PHP-Releases

PHP 8.0.23 released!

PHP 8.1.10 released!

PHP 7.4.30 released!