Самоучитель: PHP 8.5: инженерный практикум
Глава 15 из 22IV. Объектный дизайн115 минут

Глава 15. Composer, PSR-4 и безопасная граница Twig

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

После главы вы сможете
  • зафиксировать зависимости
  • настроить PSR-4
  • не протащить бизнес-логику в Twig

Json разрешает, lock фиксирует

composer.json задаёт допустимые диапазоны и требования php/ext-*, composer.lock хранит конкретное разрешённое дерево приложения. В CI и production выполняют install по lock-файлу. update является отдельным изменением, которое проходит обзор, тесты и аудит.

Composer не устанавливает системное расширение. Виртуальные platform packages делают требования машиночитаемыми, а check-platform-reqs сравнивает lock с реальным production-интерпретатором.

Сборка объектов

От файлов к работающему сценариюComposition root создаёт конкретные адаптеры и передаёт их объектам прикладного слоя.composer.jsonconstraintslockresolvedPSR-4autoloadRootwireHandlerrun
Composition root создаёт конкретные адаптеры и передаёт их объектам прикладного слоя.

PSR-4 требует точного регистра

Префикс пространства имён сопоставляется каталогу, а оставшаяся часть имени — пути файла. Регистр класса и файла совпадает: ошибка, незаметная на типичной Windows-среде, проявится на Linux.

Не пишите собственную цепочку include для класса, если Composer уже решает автозагрузку. Пользовательский ввод никогда не участвует в имени подключаемого файла.

Twig — представление, не домен

Шаблон получает WorkoutView с готовыми строками, ссылками и флагами доступности. Он может выполнить простое условие отображения, но не запрашивает repository, не вычисляет право и не изменяет сущность.

Twig 3 использует автоматическое HTML-экранирование при корректной настройке. Фильтр raw разрешён только для значения, которое построено доверенным HTML-компонентом по отдельному контракту; пользовательский текст через raw выводить нельзя.

Выбор зависимости

До установки пакета проверьте назначение, поддерживаемые версии PHP, лицензию, активность, историю security advisories и стоимость удаления. Маленькая библиотека способна принести большое транзитивное дерево.

В 2026 Composer audit остаётся обязательной проверкой, а политика security advisories может блокировать уязвимые версии при разрешении. Игнорирование advisory документируется с причиной и сроком, а не остаётся вечной настройкой.

Лабораторная работа

Настройте App\ как src/, соберите handler в одном composition root и передайте Twig только WorkoutView. Добавьте команды install, audit и check-platform-reqs в чек-лист сборки.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Перелинковка со справочником

Проверка актуальности

  • getcomposer.orghttps://getcomposer.org/doc/01-basic-usage.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • getcomposer.orghttps://getcomposer.org/doc/articles/composer-platform-dependencies.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • getcomposer.orghttps://getcomposer.org/doc/03-cli.mdПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php-fig.orghttps://www.php-fig.org/psr/psr-4/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • twig.symfony.comhttps://twig.symfony.com/doc/3.x/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie