zoukankan      html  css  js  c++  java
  • laravel的服务容器(药箱)、服务提供者(小盒子)、Facades(更方便用药),方便大家透彻理解

    服务容器(药箱)
      就是这个$app

    绑定(放药)

      $app->bind('Apple', function(){
        return 一个对象;
      })

    解析(取药)

      resolve('Apple'); //返回一个上面设定好的对象
      $this->app->make('HelpSpotAPI');
      app()->make('HelpSpotAPI');
      app('HelpSpotAPI');
      app()['HelpSpotAPI']
      app()->get('HelpSpotAPI')
      public function xxx(HelpSpotAPI $users)

      // 注入依赖
      $api = $this->app->makeWith('HelpSpotAPI', ['id' => 1]);
      $api = app('HelpSpotAPI', ['id' => 1]);
      $api = resolve('HelpSpotAPI', ['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...
        */
        AppProviderAbcServiceProvider::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 扩展了IlluminateFoundationHttpKernel 类,父类强制在处理请求前应该做哪些操作,操作内容都放到了 bootstrappers 数组里面(配置错
    误处理、配置记录日志、检测应用环境、注册和启动服务提供者等)。子类在数组 middleware 中规定了请求在被处理前必须经过的一些处理(读写 session、判断是否处于维护模式、验证 csrf 令牌等)。

    5.处理请求,返回响应内容。

    跳转链接:

    https://blog.csdn.net/zhetmdoubeizhanyong/article/details/104628453

    https://blog.csdn.net/onegoal/article/details/103180182

  • 相关阅读:
    Windows下Yarn安装与使用
    论文阅读Graph Convolutional Matrix Completion
    如何快速查询中科院JCR分区和汤森路透JCR分区
    Implement GAN from scratch
    PyCharm将main.py解析成text文件的解决方法
    理解PyTorch的自动微分机制
    mcast_set_if函数
    mcast_get_if函数
    mcast_unblock_source函数
    mcast_block_source函数
  • 原文地址:https://www.cnblogs.com/lyzaidxh/p/12971638.html
Copyright © 2011-2022 走看看