场景
- 像文档描述的那样,defer service provider 不是没有每个请求都要加载的,所以可以提高应用的响应效率。defer
service provider只会在需要的时候才会加载。 那么应该怎么操作
参考文档
- laravel service providers 官方文档
解决
- YourServiceProvider需要设置 $defer 属性 && provides 方法
- protected $defer = true;
The provides method should return the service container bindings registered by the provider
翻译一下就是providers 需要返回service container
- 验证是否设置成功
- php artisan clear-compile 清除掉编译的文件
- 发送一次请求 打开bootstrap/cache/services.php 文件, 就可以再deferred下标中找到自己注册的service provider 了
public function provides()
{
return [Connection::class];
}
举例
<?php
namespace App\Providers;
use App\Billing\Stripe;
use Illuminate\Support\ServiceProvider;
class BillServiceProvider extends ServiceProvider
{
protected $defer = true;
public function boot()
{
}
public function register()
{
$this->app->singleton('billing', function($app){
return new Stripe();
});
}
public function provides()
{
return ['billing'];
}
}