Laravel 5中的合同

时间:2014-12-07 10:12:49

标签: php laravel interface inversion-of-control laravel-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 个答案:

答案 0 :(得分:2)

我认为你在问Binding Interfaces To Implementations

如何将实现绑定到接口?

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

Laravel本身绑定了默认实现?

'Illuminate/Foundation/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中,它告诉容器什么是对abstract关键字的真正绑定:

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

如果您有其他问题,请告诉我。