До версії Laravel 5.5, розробники мали вручну реєструвати провайдери пакетів у масиві providers
в файлі config/app.php
.
Давайте розглянемо, як Laravel управляє автодискавері (автоматичним виявленням).
Laravel використовує подію Composer post-autoload-dump
для виконання команди Artisan package:discover
.
Ініціація процесу виявлення: Спочатку Laravel викликає функцію postAutoloadDump
, що знаходиться в Illuminate\Foundation\ComposerScripts
. Ця функція спочатку підключає файл autoload.php
Composer. Потім очищує шляхи конфігураційних файлів, кешів сервісів і пакетів.
Виконання команди package:discover
: Після цього Laravel виконує команду package:discover
, що викликає функцію build
класу Illuminate\Foundation\PackageManifest
.
Фільтрація відповідних пакетів: Ця функція спочатку завантажує файл composer/installed.json
, фільтруючи всі пакети за допомогою extra/laravel
, а потім застосовує фільтрацію, використовуючи масив dont-discover
з файлу Composer проєкту.
Якщо ви не хочете, щоб певний пакет потрапляв в автодискавері, ви можете додати його в масив dont-discover
.
Оновлення кешу: Потім цей масив записується у файл packages.php
, що знаходиться в папці bootstrap/cache
.
Висновок
Автоматичне виявлення пакетів у Laravel спрощує інтеграцію сторонніх пакетів, використовуючи події Composer для включення лише необхідних пакетів під час ініціалізації. Розробники можуть відмовитися від автодискавері для кращої кастомізації, що забезпечує безперешкодний та гнучкий досвід.
Перекладено з: How Laravel package auto-discovery work