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
| Symfony | Laravel | |
|---|---|---|
| Стиль | Явная конфигурация, enterprise | Выразительные соглашения, скорость старта |
| ORM | Doctrine (Data Mapper) | Eloquent (Active Record) |
| Шаблоны | Twig | Blade |
| CLI | bin/console | artisan |
| Типичный заказчик | Банки, госсектор, крупный 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
- Пройти первую программу на Symfony.
- Поднять CRUD с Doctrine и миграциями.
- Добавить Messenger для фоновой задачи и сравнить с очередями Laravel.
- Закрыть качество тестами из PHPUnit и тестирование PHP.
После этих шагов Symfony воспринимается как понятный рабочий инструмент, а не как академический набор терминов.
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.