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

posted @ 2020-05-27 11:38  瑛雄  阅读(191)  评论(0编辑  收藏  举报