更新时间: 2016-09-23 09:11:47       分类: web开发


服务容器和服务提供者

这两个属于laravel核心机制。按照个人通俗的理解,服务提供者就是用户引入的第三方类库(或者功能模块),laravel的核心机制是,所有的功能都由provider提供,在provider内部将类或者方法绑定(一般是会指定一个别名),而container就是将所有provider集合在一起,当你想要调用某个类的时候,不需要自己去new(会有依赖问题),而是直接由container提供给你,而且还可以使用 ** Type-hint ** 方法来产生对象,十分方便。

总的来说,整个应用其实就跑在一个container当中,当你想要扩充container的功能时,就必须利用provider来把相应的功能注册进去(provider类内部有register方法),这个container是由laravel核心提供,程序启动时就实例化的一个对象,一般在provider里用$this->app访问。

绑定(注册)服务

这个在provider中操作,一般artisan命令行创建一provider,然后在register()方法中注册服务(其实就是绑定类), 正常情况下提供了三种方式来绑定,分别是singleton()单例方式,bind()多例方式和instance()绑定现有方式。

此外还有超级高大上的绑定接口功能,看不懂,以后接触到再说。。

另外说说boot()方法,这个方法会在所有的provider都注册完成之后自动调用,下面讲到的视图组件将会用到他。

使用服务

如果想从容器中解析出已经绑定了实例的类,可以使用$this->app->make(),或者用数组的方式访问(容器实现了PHP的array access接口):$this->app[''],或者,最常见的,使用Type-hint方法直接注入实例即可。

视图

视图组件(View Composer)

视图组件是在多个视图中可能都要调用到的一个公共的方法,比如这次做的博客,在每个页面都要调用到的top-nav上面就需要获取当前用户的实例出来,直接调用Auth门面的方法虽然也可以,但是感觉并不合适,可以考虑使用一个composer来解析当前用户的登陆状态和权限,然后封装成一个数组传入视图。

视图组件可以定义在任何一个服务提供者的boot方法中,具体的定义可以参考文档。


评论

还没有评论