laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解
服务容器(药箱)
就是这个$app
绑定(放药)
$app->bind('Apple', function(){
return 一个对象;
})
解析(取药)
resolve('Apple'); //返回一个上面设定好的对象
$this->app->make('HelpSpot\API');
app()->make('HelpSpot\API');
app('HelpSpot\API');
app()['HelpSpot\API']
app()->get('HelpSpot\API')
public function xxx(HelpSpot\API $users)
// 注入依赖
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);
$api = app('HelpSpot\API', ['id' => 1]);
$api = resolve('HelpSpot\API', ['id' => 1]);
服务提供者(小盒子)
增加服务提供者是因为药箱里药太乱了,什么药都可以乱放或者说我们不知道里面有哪些药,所以现在要把药放到小盒子里,然后再把它注册好(config/app.php中注册,这样方便让我们知道我们有哪些小盒子)之后放进药箱里,这样
没有注册的小盒子里的药就解析不到,注册了的就可以取药。
创建服务提供者(创建小盒子)
php artisan make:provider AbcServiceProvider
绑定服务(把药放进小盒子里)
通过register()可以把绑定的服务启动时就将服务对象自动加载进内存,也就是放药(需要先进行下面的注册操作才可以),这样后面要用到的话才可以取药,当然,也有延迟的服务提供者,可以等到需要的时候再加载到内存中(需要该服务提供者去实现延迟provider接口)
public function register () {
$this->app->bind('Abc', function() {
return 一个Abc服务对象;
})
}
//容器调用完所有服务提供者的register方法之后才会调用boot方法
public function boot () {
}
//实现延迟服务提供者接口才可以使用
public function provides() {
return ...
}
注册服务提供者(把小盒子放进药箱里)
会自动加载注册了的服务提供者
注意: 不注册的话药箱里找不到这个小盒子也就找不到这个药
在 config/app.php中注册
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Application Service Providers...
*/
App\Provider\AbcServiceProvider::class
],
Facades(更方便用药)
之前的解析(取药):resolve('Apple'),这样太麻烦了,我们如果要用到药,还得去查看它的标签是啥,例如是Apple
请求生命周期
1.所有请求必定首先通过 public/index.php。
2.在上述这个文件中首先加载 composer 自动加载文件,然后从
bootstrap/app.php 实例化一个服务容器。
3.接下来,框架会根据请求类型传送请求至 app/Http/Kernel.php 或者 app/Console/Kernel.php。
4.app/Http/Kernel.php 扩展了Illuminate\Foundation\Http\Kernel 类,父类强制在处理请求前应该做哪些操作,操作内容都放到了 bootstrappers 数组里面(配置错
误处理、配置记录日志、检测应用环境、注册和启动服务提供者等)。子类在数组 middleware 中规定了请求在被处理前必须经过的一些处理(读写 session、判断是否处于维护模式、验证 csrf 令牌等)。
5.处理请求,返回响应内容。
跳转链接:
https://blog.csdn.net/zhetmdoubeizhanyong/article/details/104628453
https://blog.csdn.net/onegoal/article/details/103180182