Контракты в Ларавел 5

Интерфейсы я понимаю по причинам. Единую ответственность я понимаю в рассуждениях. По сути, я понимаю, почему был выбран путь «контракт», я просто пытаюсь понять реализацию.

Например, документы дают нам этот пример:

<?php namespace App\Orders;

use Illuminate\Contracts\Cache\Repository as Cache;

class Repository {

/**
* Create a new repository instance.
*
* @param  Cache  $cache
* @return void
*/
public function __construct(Cache $cache)
{
$this->cache = $cache;
}

}

Если бы я заменил собственный драйвер кеша laravel на, скажем, сторонний, независимый от фреймворка драйвер кеша, пришлось бы мне тогда писать адаптер, чтобы придерживаться контракта на кеш Laravel 5.0?

1

Решение

Я думаю, что вы спрашиваете Связывание интерфейсов с реализациями.

Как привязать реализацию к интерфейсу?

$this->app->bind('App\Contracts\EventPusher', 'App\Services\PusherEventPusher');

И где сам Laravel связывает реализации по умолчанию?

В ‘Осветите / Фонд / application.php’, он сказал контейнеру, каковы псевдонимы для абстрактного ключевого слова:

'cache' => ['Illuminate\Cache\CacheManager', 'Illuminate\Contracts\Cache\Factory'],

таким образом, когда вы пишете либо

$this->app->make('Illuminate\Cache\CacheManager')

или же

$this->app->make('Illuminate\Contracts\Cache\Factory')

это в основном так же, как

$this->app->make('cache')

И в Illuminate \ Cache \ CacheServiceProvider.php он рассказал контейнеру, каковы реальные привязки к абстрактному ключевому слову:

$this->app->singleton('cache', function ($app) {
return new CacheManager($app);
});

Дайте мне знать, если у вас есть другие вопросы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]