Ответ
Сервис-провайдер в Laravel — это класс, который регистрирует привязки в сервис-контейнере и выполняет начальную загрузку компонентов приложения. Это центральный механизм для настройки сервисов, подключения маршрутов, представлений, миграций и других частей фреймворка.
Основные методы:
register()— используется только для регистрации привязок в контейнере. Здесь не следует обращаться к другим сервисам, так как они могут быть ещё не зарегистрированы.boot()— вызывается после регистрации всех провайдеров. Здесь безопасно выполнять любую логику инициализации, например, определять маршруты, публиковать ассеты или делиться данными с представлениями.
Пример провайдера для регистрации кастомного сервиса:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use AppServicesPaymentGateway;
class PaymentServiceProvider extends ServiceProvider
{
public function register(): void
{
// Регистрируем синглтон в контейнере
$this->app->singleton(PaymentGateway::class, function ($app) {
return new PaymentGateway(config('services.payment.secret'));
});
}
public function boot(): void
{
// После загрузки всех провайдеров добавляем глобальную перемену для всех views
IlluminateSupportFacadesView::share('appVersion', '1.0.0');
}
}
Регистрация провайдера: Провайдеры добавляются в массив providers в файле config/app.php. Laravel автоматически загружает и выполняет их при запуске приложения. Это позволяет организовать код в модули и управлять зависимостями.