Перейти к основному содержимому

Symfony

Разработчику Архитектору

Symfony

Symfony — зрелый PHP-фреймворк и набор переиспользуемых компонентов (HTTP, Console, Messenger, Validator и др.). Laravel и API Platform опираются на части Symfony; многие enterprise-проекты выбирают Symfony напрямую за предсказуемость, долгую поддержку LTS и строгую архитектуру.

Пошаговый старт: Первая программа на Symfony. Шпаргалка: Справочник по Symfony. Сравнение с Laravel: Laravel, Экосистема PHP-приложений.


Философия — компоненты и полный фреймворк

ПодходОписание
Только компонентыПодключить symfony/http-foundation + routing в свой проект
Symfony FrameworkСоглашения, бандлы, DI, конфигурация YAML/PHP
Symfony FlexРецепты: после composer require автоматически настраиваются файлы

Требования: PHP 8.2+, Composer, расширения ctype, iconv, mbstring (см. официальную документацию для вашей версии).


Жизненный цикл HTTP-запроса

Точка входа — public/index.php. Каталог public/ — единственная директория, доступная извне (аналогично Laravel).


Ключевые понятия

Бандлы (Bundles)

Модуль функциональности — регистрирует маршруты, сервисы, шаблоны. FrameworkBundle, TwigBundle, SecurityBundle — стандартный набор.


DI-контейнер

Зависимости объявляются в config/services.yaml и внедряются через конструктор:

public function __construct(
private readonly EntityManagerInterface $em,
) {}

Разбор:

  • public function __construct(...) — конструктор класса; вызывается автоматически при создании объекта.
  • private readonly EntityManagerInterface $em — свойство сразу объявляется в сигнатуре конструктора, получает зависимость и после инициализации не может быть переопределено.
  • EntityManagerInterface — контракт Doctrine для работы с сущностями — persist(), flush(), remove(), работа с Unit of Work.
  • Такой стиль называется constructor injection — сервис получает зависимости явно, что упрощает тестирование и замену реализаций.
  • Symfony DI-контейнер по типу EntityManagerInterface автоматически подставляет подходящий сервис при создании класса.

Автоконфигурация помечает классы в src/ как сервисы.


Маршрутизация

Атрибуты PHP 8 (предпочтительно в новых проектах):

#[Route('/hello', name: 'app_hello')]
public function hello(): Response
{
return new Response('Hello');
}

Разбор:

  • #[Route(...)] — PHP-атрибут, который объявляет маршрут прямо над методом контроллера.
  • '/hello' — URL-путь; при GET-запросе на этот адрес роутер направляет выполнение в метод hello().
  • name: 'app_hello' — внутреннее имя маршрута для генерации ссылок через path('app_hello') и url('app_hello').
  • public function hello(): Response — метод обязан вернуть объект Response, чтобы Symfony отправил корректный HTTP-ответ.
  • new Response('Hello') — формирует тело ответа со строкой Hello; при необходимости можно дополнить заголовки и статус-код.

Doctrine ORM

Стандарт де-факто для работы с БД — сущности, репозитории, миграции (php bin/console make:migration).


Messenger

Асинхронные задачи и очереди — аналог Laravel Queue. Транспорты — AMQP, Redis, Doctrine.


Security

Firewall, аутентификация (form login, JWT через пакеты), роли и voters для авторизации.


Symfony и Laravel

SymfonyLaravel
СтильЯвная конфигурация, enterpriseВыразительные соглашения, скорость старта
ORMDoctrine (Data Mapper)Eloquent (Active Record)
ШаблоныTwigBlade
CLIbin/consoleartisan
Типичный заказчикБанки, госсектор, крупный B2BСтартапы, агентства, широкий рынок

Оба фреймворка "взрослые"; выбор часто определяется командой и политикой компании, а не "слабостью" технологии.


Инструменты

symfony new myapp --webapp # скелет с Twig, Doctrine, Security
composer require symfony/orm-pack
php bin/console cache:clear
php bin/console debug:router
symfony server:start # локальный сервер (Symfony CLI)

Разбор:

  • symfony new myapp --webapp — создаёт полноценный стартовый проект с веб-стеком, включая шаблонизатор и стандартные пакеты.
  • composer require symfony/orm-pack — подключает набор ORM-зависимостей для работы с Doctrine и миграциями.
  • php bin/console cache:clear — очищает кэш контейнера и конфигурации; полезно после изменений в сервисах/маршрутах.
  • php bin/console debug:router — выводит таблицу зарегистрированных маршрутов, HTTP-методы и соответствующие контроллеры.
  • symfony server:start — запускает локальный сервер Symfony CLI, удобно для разработки без отдельной конфигурации Nginx/Apache.

Связанные материалы


Где Symfony особенно силен

Symfony часто выбирают в проектах с длинным жизненным циклом и строгими требованиями к поддержке.

СценарийПочему Symfony подходит
Крупные B2B-системыЯвная конфигурация и строгая структура модулей
API с высокими требованиями к контрактамСильная экосистема вокруг Serializer, Validator, Messenger
Интеграционные платформыКомпонентный подход и предсказуемый DI

Такой профиль хорошо ложится на команды, где важна управляемость изменений между релизами.


Практический маршрут изучения Symfony

  1. Пройти первую программу на Symfony.
  2. Поднять CRUD с Doctrine и миграциями.
  3. Добавить Messenger для фоновой задачи и сравнить с очередями Laravel.
  4. Закрыть качество тестами из PHPUnit и тестирование PHP.

После этих шагов Symfony воспринимается как понятный рабочий инструмент, а не как академический набор терминов.


Основа по протоколу

Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.