Этот вопрос проверяет, понимаете ли вы жизненный цикл приложения Laravel и умеете ли регистрировать зависимости/настройки через сервис-провайдеры
Сервис-провайдеры в Laravel — это классы, где приложение регистрирует и настраивает свои сервисы. В них обычно есть методы register() и boot(): в register() добавляют привязки в контейнер (bind/singleton), а в boot() выполняют настройку после регистрации (например, макросы, политики, кастомные правила валидации). AppServiceProvider — базовый провайдер вашего приложения, который создаётся по умолчанию. Провайдеры помогают держать инициализацию проекта в одном месте и подключать функциональность модульно.
В Laravel почти всё подключается через сервис-провайдеры: фреймворк и пакеты “объявляют” свои сервисы именно так.
Определение: Service Provider — это точка входа для регистрации сервисов и конфигурации приложения в процессе загрузки Laravel.
Регистрация зависимостей в контейнере (чтобы потом внедрять их через DI).
Инициализация/настройка функционала (валидация, макросы, политики, наблюдатели и т.д.).
Интеграция пакетов: пакет добавляет провайдер — и Laravel узнаёт, что и как подключать.
register()В register() размещают то, что регистрирует зависимости:
bind() — создавать новый объект при каждом запросе из контейнера.
singleton() — один объект на всё приложение (в рамках жизненного цикла).
Мёрдж конфигов пакета: mergeConfigFrom(...) (если нужно).
Мини-пример:
public function register(): void
{
$this->app->singleton(\App\Services\Clock::class, function () {
return new \App\Services\Clock(/* ... */);
});
}
boot()В boot() размещают то, что настраивает систему после регистрации:
регистрация политик (Gate, Policy)
кастомные правила валидации
макросы для Collection, Str, Response
Model::observe(...) (наблюдатели)
настройка пагинации/локали/форматов
Пример кастомного правила:
use Illuminate\Support\Facades\Validator;
public function boot(): void
{
Validator::extend('even', fn($attr, $value) => $value % 2 === 0);
}
AppServiceProviderЭто провайдер “по умолчанию” в вашем приложении (app/Providers/AppServiceProvider.php).
Туда часто кладут общие привязки и небольшие глобальные настройки.
Но крупные вещи лучше выносить в отдельные провайдеры (например, BillingServiceProvider), чтобы не превратить AppServiceProvider в свалку.
Сервис-провайдеры стоит использовать для всех “подключений” и инициализаций: привязки в контейнере делайте в register(), а настройку поведения фреймворка — в boot().