Laravel - зачем нам поставщики услуг, когда мы можем сделать это с контейнером услуг - PullRequest
0 голосов
/ 07 января 2020

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

Позвольте мне показать, как я могу достичь цель с использованием любого подхода:

Подход поставщика услуг:

В моем проекте внутри app/Service у меня есть файлы AwesomeServiceInterface.php и AwesomeService.php.

Внутри AwesomeServiceInterface.php файла, у меня есть:

namespace App\Service;

interface AwesomeServiceInterface
{
    public function doAwesomeThing();
}

Внутри AwesomeService.php файла, у меня есть:

namespace App\Service;

class AwesomeService implements AwesomeServiceInterface
{
    public function doAwesomeThing()
    {
        echo 'do awesome thing !!!';
    }
}

В файле config/app.php я добавили в массив 'providers' следующую строку:

App\Providers\AwesomeServiceProvider::class,

Внутри app/Providers, у меня есть файл AwesomeServiceProvider.php, который содержит:

public function register()
    {
        $this->app->bind('App\Service\AwesomeServiceInterface', 'App\Service\AwesomeService');
    }

Внутри HomeController.php, У меня есть:

use App\Service\AwesomeServiceInterface;
  ........
  public function doAwesome(AwesomeServiceInterface $awesome_service)
    {
        $awesome_service->doAwesomeThing();
        return '';

    }

В routes/web.php у меня есть:

Route::get('/awesome', 'HomeController@doAwesome')->name('awesome');

Теперь, когда я нажимаю на URL /awesome, я получаю то, что ожидал, то есть do awesome thing !!!

Подход с использованием контейнера услуг:

Без создания какого-либо поставщика услуг (т. Е. AwesomeServiceProvider), у меня есть внутри register метод AppServiceProvider.php в app/Providers:

 public function register()
    {

        $this->app->bind('App\Service\AwesomeServiceInterface','App\Service\AwesomeService');

    }

На этот раз я также могу нажать URL /awesome и получить тот же вывод, что и раньше.

Итак Q1) Зачем мне нужен какой-либо поставщик услуг в описанный выше сценарий?

Q2) в каком случае мне нужен поставщик услуг, который не может достичь цели только с помощью контейнера служб, т.е. без использования какого-либо поставщика услуг?

...