| 1 | # Laravel — связь с Symfony: компоненты и границы ответственности |
| 2 | |
| 3 | **Назначение:** объяснить, **почему** в Laravel встречаются классы и концепции Symfony (HttpFoundation, Console, Process, …) и **когда** идти в документацию symfony.com. Мир `software.laravel` + пересечение с `software.php`. |
| 4 | |
| 5 | **Порядок загрузки:** `kb-laravel-fundamentals-v1.md` → этот файл. Глубокий PHP — `kb-php-language-semantics-v1.md`. |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ### 1. Факт: Laravel строится на компонентах Symfony |
| 10 | |
| 11 | - **Fact:** ядро HTTP-абстракций, консоль, процессы, MIME, переводы, rate limiter, finder и др. historically/фактически опираются на **symfony/*** пакеты (конкретный набор зависит от версии `laravel/framework` — смотреть `composer.lock`). |
| 12 | - **Heuristic:** stack trace с `Symfony\Component\HttpFoundation` — норма, не «ошибка фреймворка». |
| 13 | - **Confidence:** high |
| 14 | |
| 15 | --- |
| 16 | |
| 17 | ### 2. Типичные точки контакта разработчика |
| 18 | |
| 19 | | Область | Symfony-слой (концептуально) | Практика в Laravel | |
| 20 | |---------|--------------------------------|-------------------| |
| 21 | | Request/Response | HttpFoundation | `Illuminate\Http\Request` оборачивает/наследует поведение foundation | |
| 22 | | Console | Console | `artisan` команды, стиль вывода, сигналы | |
| 23 | | Subprocess / shell | Process | `Illuminate\Support\Process` (обёртки вокруг Process component в современных версиях) | |
| 24 | | MIME / guess types | Mime | загрузки файлов, ответы с типами | |
| 25 | | Translation | Translation | `__()`, lang files | |
| 26 | | Routing (частично) | Routing concepts | Laravel router — свой DSL, но идеи middleware/pipeline родственны | |
| 27 | |
| 28 | - **Heuristic:** баг «на границе HTTP» (заголовки, cookies, stream) — иногда проще искать по **Symfony HttpFoundation** + версии пакета в lockfile. |
| 29 | |
| 30 | --- |
| 31 | |
| 32 | ### 3. Когда читать Symfony docs вместо Laravel |
| 33 | |
| 34 | - **Низкоуровневые детали** Response (стримы, BinaryFileResponse), Cookie flags, нюансы консольного I/O. |
| 35 | - **Версионная несовместимость** после `composer update`, когда меняется минор Symfony под капотом Laravel. |
| 36 | |
| 37 | - **Heuristic:** сначала **Laravel docs** для идиоматичного API; Symfony — для edge cases и мажоров компонентов. |
| 38 | |
| 39 | --- |
| 40 | |
| 41 | ### 4. Что эта KB не покрывает |
| 42 | |
| 43 | - **WordPress / Drupal** — см. `index-knowledge-php-adjacent-ecosystem-v1.md` и `kb-wordpress-architecture-ops-v1.md` / `kb-drupal-architecture-ops-v1.md`. |
| 44 | - **Прямая разработка на Symfony Framework** — `kb-symfony-framework-fundamentals-v1.md`; здесь только **мост** для Laravel-разработчика. |
| 45 | |
| 46 | --- |
| 47 | |
| 48 | ## Registry card (template-knowledge-card-v1) |
| 49 | |
| 50 | ### Provenance |
| 51 | - source_refs: composer dependencies `laravel/framework`; Symfony component docs; обобщение 2026-03-01 |
| 52 | - created_at: 2026-03-01 |
| 53 | - updated_at: 2026-03-01 |
| 54 | - author: agent-notes KB maintainer |
| 55 | |
| 56 | ### Metadata |
| 57 | - card_id: KC-2026-03-01-LARAVEL-SYMFONY |
| 58 | - world: software.laravel |
| 59 | - layer: world |
| 60 | - tags: laravel; symfony; http-foundation; console |
| 61 | - status: active |
| 62 | |
| 63 | ### Epistemic Linkage |
| 64 | - epistemic_basis: fact + inference |
| 65 | - evidence_type: dependency graph + official Symfony/Laravel docs |
| 66 | - confidence: medium |
| 67 | - uncertainty: точный список компонентов на каждом миноре Laravel |
| 68 | - falsification_trigger: смена зависимостей в новом релизе laravel/framework |
| 69 | - transfer_boundary: не руководство по чистому Symfony Full Stack |
| 70 | |
| 71 | ### Core Unit |
| 72 | - context: stack trace в Symfony, странное поведение Response/Cookie |
| 73 | - signal: «это Laravel или Symfony» |
| 74 | - action: lockfile → компонент → нужная doc ветка |
| 75 | - outcome: быстрее локализовать слой |
| 76 | - lesson: Laravel = оркестрация + соглашения поверх компонентов |
| 77 | |
| 78 | ### Operationalization |
| 79 | - first_adoption_task: знать major/minor symfony/* из composer.lock при апгрейде |
| 80 | - validation_check: регрессия интеграционных тестов после composer update |
| 81 | - success_criterion: нет сюрпризов от изменения symfony/* в патче |
| 82 | - rollback_or_mitigation: pin зависимости только как временная мера + тикет |
| 83 | |
| 84 | ### Lifecycle |
| 85 | - supersedes: — |
| 86 | - superseded_by: — |
| 87 | - deprecation_reason: — |
| 88 | |
| 89 | |