| 1 | # Symfony Framework — фундамент (full stack, не только «под Laravel») |
| 2 | |
| 3 | **Назначение:** карта **Symfony как приложения**: Kernel, bundles, DI-контейнер, конфигурация, HTTP, консоль, типичные компоненты. Отличается от `kb-laravel-symfony-underpinnings-v1.md` (там — роль Symfony **внутри** Laravel; читать его, если проект на Laravel). Мир `software.symfony`. |
| 4 | |
| 5 | **Порядок:** `playbook-php-v1.md` → этот файл. Общий PHP — `kb-php-*`. |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ### 1. Kernel и жизненный цикл запроса |
| 10 | |
| 11 | - **Fact:** `HttpKernel` обрабатывает Request → события ядра (request, controller, view, response, exception, terminate) → Response. |
| 12 | - **Heuristic:** отладка middleware-подобного поведения — через **event subscribers** и порядок приоритетов. |
| 13 | - **Confidence:** high |
| 14 | |
| 15 | --- |
| 16 | |
| 17 | ### 2. Bundles и структура проекта |
| 18 | |
| 19 | - **Fact:** функциональность упаковывается в **bundles**; приложение — набор bundles + конфиг `config/packages/*`. |
| 20 | - **Heuristic:** Symfony **Flex** и рецепты настраивают пакеты при `composer require`; не коммитить секреты в yaml. |
| 21 | |
| 22 | --- |
| 23 | |
| 24 | ### 3. Dependency Injection |
| 25 | |
| 26 | - **Fact:** сервисы регистрируются в контейнере; автоконфигурация и autowiring (в современных версиях) снижают бойлерплейт; интерфейсы → реализации в `services.yaml`. |
| 27 | - **Heuristic:** сервис `public: false` по умолчанию — инъекция через конструктор, не `$container->get()` в бизнес-коде. |
| 28 | |
| 29 | --- |
| 30 | |
| 31 | ### 4. Routing и контроллеры |
| 32 | |
| 33 | - **Fact:** маршруты — атрибуты / yaml / php config; контроллеры возвращают Response, JsonResponse или render (Twig). |
| 34 | - **Heuristic:** единообразие с Laravel заканчивается на уровне «есть router»; синтаксис и conventions другие. |
| 35 | |
| 36 | --- |
| 37 | |
| 38 | ### 5. Doctrine ORM (типичный стек) |
| 39 | |
| 40 | - **Fact:** в экосистеме Symfony часто **Doctrine**; сущности, миграции, репозитории. |
| 41 | - **Heuristic:** отличия от Eloquent — другой язык запросов (DQL, QueryBuilder); не переносить паттерны Laravel без проверки. |
| 42 | |
| 43 | --- |
| 44 | |
| 45 | ### 6. Messenger, Mailer, Scheduler |
| 46 | |
| 47 | - **Fact:** **Messenger** — очереди и message bus; **Mailer** — абстракция почты; интеграция с cron через scheduler-пакеты или системный cron + консольные команды. |
| 48 | - **Heuristic:** как и в Laravel, идемпотентность обработчиков сообщений и retry policy — явно в коде/конфиге. |
| 49 | |
| 50 | --- |
| 51 | |
| 52 | ### 7. Тестирование |
| 53 | |
| 54 | - **Fact:** **PHPUnit**, **WebTestCase**, Kernel test; иногда Panther для браузера. |
| 55 | - **Heuristic:** `kb-php-tooling-quality-v1.md` — общий слой; Symfony-специфика — документация testing ветки symfony.com/doc. |
| 56 | |
| 57 | --- |
| 58 | |
| 59 | ### 8. Версии и апгрейды |
| 60 | |
| 61 | - **Fact:** мажор Symfony (5 → 6 → 7 …) сопровождается **upgrade guides** и deprecations; LTS-ветки для долгой поддержки. |
| 62 | - **Heuristic:** всегда сверять с **версией**, зафиксированной в `composer.lock`, не с «последней статьёй в блоге». |
| 63 | |
| 64 | --- |
| 65 | |
| 66 | ### 9. Граница с Laravel и Drupal |
| 67 | |
| 68 | - **Laravel** — другой full-stack; общие компоненты Symfony не делают приложения взаимозаменяемыми. |
| 69 | - **Drupal** — CMS на Symfony; разработка модулей Drupal ≠ разработка чистого Symfony app, но HttpFoundation и т.д. родственны. |
| 70 | |
| 71 | --- |
| 72 | |
| 73 | ## Registry card (template-knowledge-card-v1) |
| 74 | |
| 75 | ### Provenance |
| 76 | - source_refs: `https://symfony.com/doc/current/index.html`; 2026-03-01 |
| 77 | - created_at: 2026-03-01 |
| 78 | - updated_at: 2026-03-01 |
| 79 | - author: agent-notes KB maintainer |
| 80 | |
| 81 | ### Metadata |
| 82 | - card_id: KC-2026-03-01-SYMFONY-FW |
| 83 | - world: software.symfony |
| 84 | - layer: world |
| 85 | - tags: symfony; http-kernel; di; doctrine; messenger |
| 86 | - status: active |
| 87 | |
| 88 | ### Epistemic Linkage |
| 89 | - epistemic_basis: fact + inference |
| 90 | - evidence_type: official Symfony documentation |
| 91 | - confidence: medium |
| 92 | - uncertainty: минорные изменения между LTS и current |
| 93 | - falsification_trigger: несовпадение с doc выбранной ветки |
| 94 | - transfer_boundary: не заменяет чтение doc по конкретному компоненту |
| 95 | |
| 96 | ### Core Unit |
| 97 | - context: greenfield Symfony, миграция с другого фреймворка |
| 98 | - signal: «bundle vs package», «где сервисы» |
| 99 | - action: kernel events + services.yaml |
| 100 | - outcome: идиоматичная структура проекта |
| 101 | - lesson: Symfony явный и явно конфигурируемый |
| 102 | |
| 103 | ### Operationalization |
| 104 | - first_adoption_task: зафиксировать major symfony/* в README |
| 105 | - validation_check: `bin/console lint:container` где доступно |
| 106 | - success_criterion: деплой с `composer install --no-dev` и env |
| 107 | - rollback_or_mitigation: откат lockfile |
| 108 | |
| 109 | ### Lifecycle |
| 110 | - supersedes: — |
| 111 | - superseded_by: — |
| 112 | - deprecation_reason: — |
| 113 | |
| 114 | |