laravel服务提供者

服务提供者是Laravel中完成服务绑定的功能类,其注册分为应用服务容器初始化时和内核Kernel处理请求前两个阶段。在构造函数中注册基础服务提供者,如EventServiceProvider,LogServiceProvider等。Kernel的处理请求过程中,通过bootstrap阶段注册并启动服务提供者。延迟绑定的设置允许控制服务何时被初始化。
摘要由CSDN通过智能技术生成

服务提供者,其实就是用来完成服务绑定的独立功能类,

绑定的时机:

一部分,就是在应用服务容器初始化时($app实例化),完成基础的服务绑定,参考代码:

文件 Illuminate\Foundation\Application __construct()

// 注册基础服务提供者

$this->registerBaseServiceProviders();

protected function registerBaseServiceProviders()
{
    $this->register(new EventServiceProvider($this));
    $this->register(new LogServiceProvider($this));
    $this->register(new RoutingServiceProvider($this));
}

另一部分,是在内核 Kernel 处理请求前,会绑定一些基础功能服务提供者。

1. $kernel->handle

2. $this->sendRequestThroughRouter($request);

3. $this->bootstrap();

4. $this->app->bootstrapWith($this->bootstrappers());

protected $bootstrappers = [
    \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
    \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
    \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
    \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
    // 先启动注册服务提供者,触发服务提供者的register()方法
    \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
    // 注册完毕后,在启动boot服务提供者,触发全部服务提供者的boot()方法
    \Illuminate\Foundation\Bootstrap\BootProviders::class,
];

5. $app->registerConfiguredProviders();

public function registerConfiguredProviders()
{
    //加载config/app.php的providers和defaultProviders,并将框架的providers排在数组前面
    $providers = Collection::make($this->make('config')->get('app.providers'))
                        ->partition(fn ($provider) => str_starts_with($provider, 'Illuminate\\'));

    //将bootstrap/cache/packages.php中的providers插入到$providers中间。
    $providers->splice(1, 0, [$this->make(PackageManifest::class)->providers()]);

    //注册$providers中的eager,并将$manifest写入bootstrap/cache/services.php
    (new ProviderRepository($this, new Filesystem, $this->getCachedServicesPath()))
                    ->load($providers->collapse()->toArray());
}

任何服务提供者的 boot () 方法都会在全部服务提供者注册之后运行。那也就可以保证在 boot () 方法中,可以使用全部的注册服务。

protected $defer = true;   //延迟绑定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值