Новое в Symfony 7.2: Упрощённые однофайловые приложения Symfony

Источник: «New in Symfony 7.2: Simpler Single-File Symfony Applications»
В Symfony 7.2 однофайловые приложения стали проще и требуют меньше настроек.

Symfony позволяет создавать однофайловые приложения, удобные для простых воркеров, микросервисов, CLI-инструментов, минимальных API и многого другого. Вот пример однофайлового приложения, как оно выглядит сейчас:

// index.php
use App\Generator\NumberGenerator;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
use Symfony\Component\Routing\Attribute\Route;

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

class Kernel extends BaseKernel
{
use MicroKernelTrait;

public function registerBundles(): array
{
return [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
];
}

protected function configureContainer(ContainerConfigurator $container): void
{
$container->extension('framework', [
'secret' => 'S0ME_SECRET'
]);

// В качестве альтернативы можно определить это в конфигурационном файле и загрузить его как:
// $container->import(__DIR__.'/../config/framework.yaml');
}

#[Route('/random/{limit}', name: 'random_number')]
public function randomNumber(int $limit, NumberGenerator $numberGenerator): JsonResponse
{
return new JsonResponse([
'number' => $numberGenerator->generate($limit),
]);
}
}

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

В Symfony 7.2 мы упростили MicroKernelTrait. Теперь то же самое приложение выглядит следующим образом:

// index.php
use App\Generator\NumberGenerator;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
use Symfony\Component\Routing\Attribute\Route;

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

class Kernel extends BaseKernel
{
use MicroKernelTrait;

#[Route('/random/{limit}', name: 'random_number')]
public function __invoke(int $limit, NumberGenerator $numberGenerator): JsonResponse
{
return new JsonResponse([
'number' => $numberGenerator->generate($limit),
]);
}
}

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

В Symfony 7.2 внесены следующие изменения:

Комментарии


Дополнительные материалы

Предыдущая Статья

Laravel под капотом: Немного макросов

Следующая Статья

Недостатки JavaScript