Laravel中服务提供者的register和boot分别是干什么

看了官方文档,不是很懂这两个步骤是做什么的

大致知道register里面是用来写绑定到服务容器的代码,那么boot里面写的是什么呢?这个boot里面的代码是不是相当于构造方法一样的功能?

register方法
正如前面所提到的,在register方法中只绑定事物到服务容器,而不要做其他事情,否则,一不小心就能用到一个尚未被加载的服务提供者提供的服务。

现在让我们来看看一个基本的服务提供者长什么样:

<?php

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方法了。该方法在所有服务提供者被注册以后才会被调用,这就是说我们可以在其中访问框架已注册的所有其它服务:

<?php

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) {
    //
}); }
查看回复