lumen程序入口: public/index.php
加载bootstrap/app.php : $app = require __DIR__.'/../bootstrap/app.php';
执行容器的run():$app->run()
文件bootstrap/app.php
加载vendor目录自动加载文件: require_once __DIR__.'/../vendor/autoload.php'; 这是composer默认自动加载文件
生成容器$app: $app = new Laravel\Lumen\Application(), 其实Laravel/Lumen的核心就是容器
启动Facades特性 : $app->withFacades();, Lumen 默认是禁用了Facades特性,取消注释则启用
启用Eloquent特性:$app->withEloquent(); Lumen默认禁用了Eloquent的ORM支持,作者说是给用户自行选择不同ORM的权利。
加载配置文件:$app->configure('app');, 如果有自定义的配置文件,则需要在此进行加载。
注册容器绑定:$app->singleton(), 看过源码singleton和bind区别就是前者内部调用了bind,且第三个参数设为true,意思是共享、独一的对象,也就是单例模式。
(接口,接口的实现)
注册中间件:$app->middleware, 根据需要添加或去除注释启用
注册ServiceProvider:$app->register(App\Providers\LogServiceProvider::class);, Laravel/Lumen的很大一部分特性是依赖ServiceProvider实现的
加载路由文件:$app->group()
返回容器$app
Facades 模式
中文译名:外观模式、门面模式。
主要特性:屏蔽内部实现,开放接口供外部使用,提高模块抽象。
Facades 并不是laraver独有的东西, 他就是设计模式里的外观模式。
laraver中的Facades 做了生什么?
和设计模式类似,laraver 的Facade 实现了外观模式的开关功能, 并且使用魔术函数 __callstatic 实现了静态方式调用,动态创建对象的功能。
简单的说就是 laraver 的 Facade 将某些功能 封装成工具类 , 而且能以静态方式调用 工具类的方法。
建立Facade
1.facade 类的创建
2.facade 类的封装
3. 编写服务提供者 : 在 app/Providers 下新建 FacadesServiceProvider.php
4. 注册服务提供者
容器: 将 应用程序对象放入一个 $app 变量中。
生命周期: 绑定类或者接口到容器, 绑定 中间件,返回容器时, 先执行 绑定的类,然后中间件。
laraver 接入新功能的几种方式:
依赖注入.
Facades
辅助函数
参考连接:
http://fivezh.github.io/2016/07/31/Lumem-part2-lifecycle/
https://learnku.com/laravel/t/29566
https://www.jianshu.com/p/eecc2ba7b241 ----- facade 的理解
https://blog.csdn.net/lamp_yang_3533/article/details/85220510 ---- 底层分析
浙公网安备 33010602011771号