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.处理请求,返回响应内容。

发布了48 篇原创文章 · 获赞 56 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zhetmdoubeizhanyong/article/details/104628453
今日推荐