Опубликовано:
Новое в Symfony 7.2: Упрощённые однофайловые приложения Symfony
В 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 внесены следующие изменения:
- Каталог
config/
теперь опционален, поэтому его можно полностью опустить, если вы определяете конфигурацию в методеconfigureContainer()
; - Файл
bundles.php
также опционален, а методregisterBundles()
по умолчанию теперь означаетyield new FrameworkBundle();
. Это избавляет от необходимости определять этот метод, когда не загружены другие бандлы; - Поддержка инъекции сервисов в вызываемых действиях с помощью метода
__invoke()
; - Параметр
framework.secret
теперь необязателен (это связано с другим запросом, который будет рассмотрен в другой статье).