我有一个实现EloquentCompanyRepository
接口的CompanyRepository
类。界面由find
,all
,save
等方法和其他常用方法组成。此外,它还有一些方法,例如saveEmail
,saveCall
,saveSms
。除了EloquentCompanyRepository
之外,还有一些其他类有saveEmail
,saveCall,
saveSms
方法。
我想将CompanyRepository
界面拆分为单独的文件。基本EloquentRepository
以及EmailableContract
,CallableContract
和SmsableContract
等界面。
但是我不明白,服务提供商的绑定是什么?我应该在控制器中使用什么接口?例如,存储库仅实现EloquentRepository
和EmailableContract
。而且我不能在控制器中使用这两个接口,因为如果我想获得一个EloquentCompanyRepository
类并且它只实现这两个接口,那么我应该在$ app-> bind中使用什么?
我只是不喜欢在多个存储库中重复所有这些方法,如find,all,saveEmail等
答案 0 :(得分:0)
在Laravel 5中,你有一些名为Contextual Binding的东西。您可以将给定的实现绑定到具有相同要求的不同控制器:
$this->app->when('App\Handlers\Commands\CreateOrderHandler')
->needs('App\Contracts\EventPusher')
->give('App\Services\PubNubEventPusher');
这样你就说"当CreateOrderHandler需要EventPusher时,给它一个PubNubEventPusher"的实例。