Новое в Symfony 5.1: Улучшенное микроядро

Symfony может использоваться в качестве микрорамки начиная с Symfony 2.8. Фактически, вы можете создавать полностью работающие приложения Symfony в одном файле благодаря MicroKernelTrait.

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

// index.php
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

require __DIR__.'/vendor/autoload.php';

class MySymfonyApp extends Kernel
{
    use MicroKernelTrait;

    protected function configureContainer(ContainerConfigurator $container): void
    {
        $container->services()
            ->load('App\\', '../src')
            ->set(Foo::class)->factory([$this, 'createFoo']);
    }

    public function createFoo(Bar $bar)
    {
        return new Foo($bar);
    }

    protected function configureRoutes(RoutingConfigurator $routes): void
    {
        $routes->add('home', '/')->controller([$this, 'helloAction']);
    }

    public function helloAction(Foo $foo)
    {
        return new Response('Hello '.get_class($foo));
    }
}

$app = new MySymfonyApp('dev', true);
$request = Request::createFromGlobals();
$response = $app->handle($request);
$response->send();
$app->terminate($request, $response);