看了官方文档,不是很懂这两个步骤是做什么的
大致知道register里面是用来写绑定到服务容器的代码,那么boot里面写的是什么呢?这个boot里面的代码是不是相当于构造方法一样的功能?
register方法
正如前面所提到的,在register方法中只绑定事物到服务容器,而不要做其他事情,否则,一不小心就能用到一个尚未被加载的服务提供者提供的服务。现在让我们来看看一个基本的服务提供者长什么样:
namespace AppProviders;
use RiakConnection; use IlluminateSupportServiceProvider;
class RiakServiceProvider extends ServiceProvider{
/** * 在容器中注册绑定. * * @return void */ public function register() { $this->app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection(config('riak')); }); } } 该服务提供者只定义了一个register方法,并使用该方法在服务容器中定义了一个Riak\Contracts\Connection的实现。boot方法
如果我们想要在服务提供者中注册视图composer该怎么做?这就要用到boot方法了。该方法在所有服务提供者被注册以后才会被调用,这就是说我们可以在其中访问框架已注册的所有其它服务:
namespace AppProviders;
use IlluminateSupportServiceProvider;
class EventServiceProvider extends ServiceProvider{
/** * Perform post-registration booting of services. * * @return void */ public function boot() { view()->composer('view', function () { // }); } /** * 在容器中注册绑定. * * @return void */ public function register() { // } } boot方法的依赖注入我们可以在boot方法中类型提示依赖,服务容器会自动注册你所需要的依赖:
use IlluminateContractsRoutingResponseFactory;
public function boot(ResponseFactory $factory){
$factory->macro('caps', function ($value) { // }); }
register
方法用于绑定接口和实现,初始化配置等,在这个函数中不能保证其它服务已经完全加载完毕,因此只能用于注册相关的工作,不能调用其它服务,而boot
调用的时候,所有的服务都已经注册完毕,可以放心的使用Laravel中注册的对象,可以调用其它服务。
我感觉你截取的文档中已经回答了你的问题了
register是向容器中注册东西
boot用于启动相应的服务(例如事件监听等