你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
zhuzhichao
赞同来自: Usual 、FiveSay
laravel framework
app/Providers
app/start
provider
register()
boot()
上下文绑定
controller的依赖注入
php $this->app->when('App\Handlers\Commands\CreateOrderHandler') ->needs('App\Contracts\EventPusher') ->give('App\Services\PubNubEventPusher');
CreateOrderHandler
EventPusher
PubNubEventPusher
controller
create($id)
MoiveCreater
route
__construct
create(MoiveCreater $moveCreater, $id)
Usual
赞同来自:
要回复问题请先登录或注册
2 个回复
zhuzhichao
赞同来自: Usual 、FiveSay
简单来说,服务提供者是做一些关于启动应用程序以及注册的事情。还不明白的话,这里有个典型的例子,就是根据环境来加载相应的扩展
```php
// AppServiceProvider.php
public function register()
{
$this->app->bind(
'Illuminate\Contracts\Auth\Registrar',
'App\Services\Registrar'
);
if ($this->app->environment('production')) {
$this->app->register('App\Providers\ProductionErrorHandlerServiceProvider');
} else {
$this->app->register('App\Providers\VerboseErrorHandlerServiceProvider');
}
}
```
而我们平常写程序中更加广泛的应用就是在 的 中进行依赖注入的绑定操作,以及 方法中来进行一些监听事件的绑定。
在 L5 中,对依赖注入更是加强了,让大家用起来更顺手方便了。下面的「 」以及「 」是新的功能。
上下文绑定
在 L4 中,如果你将一个类绑定到一个接口上之后,那么每次根据接口的提示注入的永远是这个类的实现,当你在不同的控制器中想实现 依靠同样的接口注入不同类 的话,那就是不可能的事情了,因为 L4 中只允许一个接口的实现绑定到该接口,除非你放弃把类绑定到接口,直接把注入的类名明确指定,但是这样又违背了依赖注入的灵活性了。在 L5 中可以根据上下文灵活注入了,例如
这样你就可以 中根据提示的接口 来注入 。
controller的依赖注入
如果你想在在 L4 中创建一个新上传的视频的时候,想 的 方法中注入 对象的话(举例的 这个类包含了视频服务器连接以及创建目录,获取缩略图,视频转换等方法),这是不可能的,因为根据 绑定的是一个参数,你不可能写到这个方法里的,解决办法是你注入到 方法并赋值给类中的变量。L5 中你可以这样来写, 。这样是不是看起来很酷?哈哈
以上内容来自我的博客文章 Laravel 5 与 Laravel 4.2 的主要差异和新功能,如果有什么问题可以继续交流 ^^
Usual
赞同来自:
其实是看了好几遍还有点迷茫。。
我对于服务提供者的理解是使用一种类似于插件的形势向框架内部提供一种服务(所以叫服务提供者),原文档中又说服务提供者与应用启动相关,这样说来是不是可以认为现在的service provider替代了之前的start功能?
在Laravel 5.0的认证机制中有一个register的service,这个又怎么理解呢?