1、请求执行流程:
/public/index.php 请求入口,载入【自动加载】机制。
/bootstrap/app.php 获取【应用】实例,载入并创建【服务容器】实例。
载入 providers 数组中的【内容提供者】,有数据库、队列、验证器等。执行它们的 register 方法注册它们,然后执行 boot 方法初始化。
/app/Http/Kernel.php HTTP内核,执行其父类 Illuminate\Foundation\Http\Kernel.php 中所有 bootstrappers 数组所定义的类,其包含了错误处理、日志、环境检测等。
其中还定义了 【中间件】&【路由中间件】 数组,【路由中间件】 将在每次请求时在构造器中被执行,用于权限控制。
执行过 RouteMddleware 后,handler 方法处理 HTTP 请求,接收一个 Request ,返回一个 Response。
2、Facades (门面):
- 说明:它为【服务容器】提供一个静态访问的接口,有易于测试,灵活,简明的优点。
- 声明: 在 config\app.php 的alias数组声明其简称及对应门面类,门面类之返回一个当前门面所代理的【服务容器】的名字。
3、服务容器:
- 说明:用于管理类依赖,和执行注入,注入方法是使用 构造器 或者 setter 方法
- 绑定:为应用绑定一个类,可以使用 $this->app->bind('类或接口名', function($app){ return new SomeClass(); // 返回对应类实例对象 });
使用 $this->app->singleton(参数同bind) 方法,可以绑定一个单例对象,以后每次都将返回同一个对象。
使用 $this->app->instance('Name', $someObject) 可以绑定一个已存在的对象。
使用 $this->app->bind('接口名', '实现类'); // 绑定接口到实现
- 获取:$this->app->make('类或接口名') 或者 $this->app['类或接口名']
- 事件:每次解析对象的时候,可以绑定一个触发事件来调用,使用:$this->app->resolving(function($object, $app){})