Содержание
Symfony в коде — это набор готовых PHP-классов, интерфейсов и трейтов, организованных по принципу «независимых компонентов», которые вы подключаете через Composer и используете для стандартных задач: маршрутизация, управление запросами/ответами, работа с сессиями, кэширование, валидация данных, отправка почты и десятки других. Если совсем просто, Symfony — это «каркас» вашего приложения. Вы пишете свои классы (контроллеры, формы, репозитории), а Symfony их вызывает в нужный момент и предоставляет готовые объекты (Request, Response, Session).
Symfony снаружи: как выглядит проект
Стандартный проект на Symfony (версии 6 или 7) имеет предсказуемую структуру каталогов. Она может меняться, но типичный вид:
my_project/
├── bin/ # консольные утилиты (console)
├── config/ # YAML/XML/PHP файлы конфигурации (сервисы, маршруты, пакеты)
├── public/ # точка входа (index.php), CSS/JS/изображения
├── src/ # ваш код: контроллеры, сущности, формы, команды
├── templates/ # Twig-шаблоны (HTML с примесями PHP)
├── translations/ # файлы переводов
└── var/ # кэш, логи, сессии
Код приложения живёт в папке src/. Именно там вы пишете классы, которые и будут «бизнес-логикой». Symfony же предоставляет инфраструктуру: когда пользователь заходит на /catalog, фреймворк находит соответствующий контроллер и вызывает его метод.
Симфони-компоненты: кирпичики фреймворка
Symfony — это не монолит, а коллекция независимых PHP-пакетов. Вы можете использовать любой компонент отдельно, даже без всего фреймворка. Например, компонент symfony/console позволяет создавать консольные команды, symfony/validator — валидировать массивы данных, symfony/mailer — отправлять письма через SMTP.
Вот самые важные компоненты и что они делают в коде:
| Компонент | Пример в коде | Задача |
|---|---|---|
HttpKernel |
$kernel->handle($request) |
Центральный диспетчер: принимает Request, возвращает Response |
Routing |
#[Route('/product/{id}')] в контроллере |
Сопоставляет URL с методом контроллера |
Doctrine (ORM) |
$repository->find($id) или DQL |
Работа с базой данных через объекты (не Symfony, но тесно связан) |
Form |
$this->createForm(ProductType::class, $product) |
Создание, рендеринг и валидация HTML-форм |
Security |
$this->denyAccessUnlessGranted('ROLE_ADMIN') |
Аутентификация, авторизация, защита от CSRF |
Twig |
{{ product.name }} в шаблоне |
Шаблонизатор, похожий на Blade, но более строгий |
Жизненный цикл запроса в коде (упрощённо)
Чтобы увидеть Symfony «в действии», проследим путь простого GET-запроса.
- Точка входа (
public/index.php): загружается автозагрузчик Composer, создаётся ядро ($kernel = new Kernel(...)). - Ядро принимает запрос:
$request = Request::createFromGlobals(). - Маршрутизатор (Router): анализирует URL, например
/user/5. Находит атрибут#[Route('/user/{id}')]в одном из контроллеров. - Контроллер: Symfony вызывает метод, передавая параметр
$id=5.#[Route('/user/{id}')] public function show(int $id): Response { $user = $this->userRepository->find($id); return $this->render('user/show.html.twig', ['user' => $user]); } - Шаблонизатор Twig: рендерит HTML, подставляя данные пользователя.
- Ответ (Response): контроллер возвращает объект
Response(илиJsonResponse), который ядро отправляет браузеру.
Таким образом, Symfony в коде — это вызов нескольких ваших классов (контроллер, форма, репозиторий) в определённом порядке. Вы не пишете код «как попало» — вы вписываетесь в шаблон проектирования, заданный фреймворком (MVC).

Примеры кода: что пишет разработчик на Symfony
Давайте посмотрим на реальные фрагменты, чтобы почувствовать разницу между «чистым PHP» и Symfony.
- Валидация данных: В чистом PHP вы бы писали несколько
if (!filter_var($email, FILTER_VALIDATE_EMAIL)). В Symfony используется декларативный подход:use Symfony\Component\Validator\Constraints as Assert; class User { #[Assert\NotBlank] #[Assert\Email] private string $email; } - Маршрутизация: вместо
if ($_SERVER['REQUEST_URI'] === '/catalog')вы пишете атрибут над методом:#[Route('/catalog', name: 'catalog_list')] - Работа с формой: создаётся класс формы с полями, а Symfony сам обрабатывает отправку, валидацию, преобразование данных в объект.
Главная идея: вы пишете декларативный код (описываете, что должно быть), а Symfony берёт на себя механику (как это сделать).
Symfony в CMS и других проектах
Symfony используется не только как отдельный фреймворк. Многие популярные CMS и платформы построены на его компонентах.
- Drupal 8+ — полностью переписан на компонентах Symfony (HttpKernel, Routing, Console).
- Laravel — использует несколько компонентов Symfony (например, консольный компонент).
- Api Platform — фреймворк для создания REST/GraphQL API на основе Symfony.
Даже если вы не пишете проекты «чисто на Symfony», знание его архитектуры поможет вам в доработке таких систем. Например, работая с Joomla, вы не встретите Symfony напрямую, но понимание принципов Dependency Injection и событий облегчит изучение архитектуры Joomla.
Закрепление: что такое Symfony простыми словами
Symfony — это дирижёр оркестра. Вы — музыканты: вы знаете свою партию (бизнес-логику). Дирижёр (Symfony) решает, когда какой музыкант вступает, как передать ему ноты (запрос) и как отправить звук в зал (ответ). Вы не думаете о микрофонах, стульях, нотных тетрадях — фреймворк предоставляет готовую сцену. Ваша задача — сыграть мелодию.
Освоить Symfony в коде означает научиться писать классы, которые вписываются в этот оркестр: контроллеры, формы, команды, слушатели событий. Документация Symfony — одна из лучших в мире, и если вы PHP-разработчик, рано или поздно вы с ней столкнётесь. И даже если вы создаёте сайты на конструкторе SitePro.by и не пишете PHP, понимание того, что такое фреймворки, поможет вам лучше оценивать готовые решения — почему один сайт «летает», а другой «тормозит».