Service Container — это мощный инструмент для управления зависимостями и выполнения внедрения зависимостей (DI) в Laravel. По сути, это "коробка", где хранятся все сервисы приложения.
app()->bind('MyService', function($app) {
return new MyService($app->make('AnotherService'));
});
class UserController {
public function __construct(protected UserService $service) {}
}
app()->singleton('Analytics', function() {
return new AnalyticsService();
});
Service Provider — это центральное место для регистрации и настройки сервисов в Laravel. Это "точка входа" для подключения функциональности в приложение.
register()
— регистрация сервисов в контейнереboot()
— выполнение после регистрации всех провайдеровnamespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Services\PaymentGateway;
use App\Services\StripeGateway;
class PaymentServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(PaymentGateway::class, function($app) {
return new StripeGateway(config('services.stripe.key'));
});
}
public function boot()
{
// Инициализация после регистрации всех сервисов
}
}
При запуске приложения:
config/app.php
register()
boot()
При обращении к сервису:
$this->app->when(PhotoController::class)
->needs(Filesystem::class)
->give(function() {
return Storage::disk('photos');
});
$this->app->tag([ReportA::class, ReportB::class], 'reports');
$this->app->bind('ReportAggregator', function($app) {
return new ReportAggregator($app->tagged('reports'));
});
$this->app->extend(Service::class, function($service, $app) {
return new DecoratedService($service);
});
php artisan make:provider GeoServiceProvider
public function register()
{
$this->app->singleton('geocoder', function($app) {
return new GoogleGeocoder(
config('services.google.maps_key')
);
});
}
$coordinates = app('geocoder')->addressToCoordinates($address);
Характеристика | Service Container | Service Provider |
---|---|---|
Роль | Хранилище зависимостей | Регистратор сервисов |
Использование | Автоматическое | Явное через методы |
Методы | bind, singleton, make | register, boot |
Время работы | Весь цикл приложения | Загрузка приложения |
Service Container — это:
Service Provider — это:
Ключевые принципы:
Для эффективной работы: