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

 手机用户2602889771 发布于 2022-11-15 18:13

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

大致知道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) {
    //
}); }
2 个回答
  • register方法用于绑定接口和实现,初始化配置等,在这个函数中不能保证其它服务已经完全加载完毕,因此只能用于注册相关的工作,不能调用其它服务,而boot调用的时候,所有的服务都已经注册完毕,可以放心的使用Laravel中注册的对象,可以调用其它服务。

    2022-11-15 18:22 回答
  • 我感觉你截取的文档中已经回答了你的问题了

    1. register是向容器中注册东西

    2. boot用于启动相应的服务(例如事件监听等

    2022-11-15 18:22 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有