Skip to content

2.2. Сервис-контейнер

1. Введение

Сервис-контейнер Laravel — это мощный инструмент для управления зависимостями классов и выполнения внедрения зависимостей. Внедрение зависимостей — это изящный термин, который по сути означает следующее: зависимости классов "внедряются" в класс через конструктор или, в некоторых случаях, методы "сеттеры".

Рассмотрим простой пример:

<?php
 
namespace App\Http\Controllers;
 
use App\Services\AppleMusic;
use Illuminate\View\View;
 
class PodcastController extends Controller
{
/**
* Create a new controller instance.
*/
public function __construct(
protected AppleMusic $apple,
) {}
 
/**
* Show information about the given podcast.
*/
public function show(string $id): View
{
return view('podcasts.show', [
'podcast' => $this->apple->findPodcast($id)
]);
}
}

В этом примере PodcastController нужно получить подкасты из источника данных, такого как Apple Music. Поэтому мы внедрим сервис, который способен получать подкасты. Поскольку сервис внедряется, мы можем легко "заменить" его или создать фиктивную реализацию сервиса AppleMusic при тестировании нашего приложения.

Глубокое понимание сервис-контейнера Laravel необходимо для создания мощных и крупных приложений, а также для участия в разработке самого ядра Laravel.