thinkphp5.0结构运用恳求生命周期详细介绍
本文实例叙述了thinkPHP5.0结构运用恳求生命周期。共享给咱们供咱们参阅,详细如下:
本篇内容咱们对ThinkPHP5.0的运用恳求的生命周期做大致的介绍,以便于开发者了解整个履行流程。
1、进口文件
用户主张的恳求都会经过运用的进口文件,一般是 public/index.php文件。当然,你也能够更改或许添加新的进口文件。
一般进口文件的代码都比较简略,一个一般的进口文件代码如下:
// 运用进口文件 // 界说项目途径 define('APP_PATH', __DIR__ . '/../application/'); // 加载结构引导文件 require __DIR__ . '/../thinkphp/start.php';
一般进口文件已界说一些常量为主,支撑的常量请参阅后续的内容或许附录部分。
2、引导文件
接下来便是履行结构的引导文件,start.php文件便是体系默许的一个引导文件。在引导文件中,会顺次履行下面操作:
① 加载体系常量界说;
② 加载环境变量界说文件;
③ 注册主动加载机制;
④ 注册过错和反常处理机制;
⑤ 加载常规装备文件;
⑥ 履行运用;
假如在你的运用进口文件中更改了默许的引导文件,则上述履行流程或许会跟从发生变化。
3、注册主动加载
体系会调用Loader::register()办法注册主动加载,在这一步完结后,一切契合标准的类库(包含Composer依靠加载的第三方类库)都将主动加载。
体系的主动加载由两个部分组成:
① 注册体系的主动加载办法 \think\Loader::autoload
② 注册体系命名空间界说
③ 加载类库映射文件(假如存在)
④ 假如存在Composer装置,则注册Composer主动加载
⑤ 注册Extend扩展目录
一个类库的主动加载检测次序为:
① 是否界说类库映射;
② PSR-4主动加载检测;
③ PSR-0主动加载检测;
能够看到,界说类库映射的办法是最高效的。
4、注册过错和反常机制
履行Error::register()注册过错和反常处理机制。
由三部分组成:
① 运用封闭办法:think\Error::appShutdown
② 过错处理办法:think\Error::appError
③ 反常处理办法:think\Error::appException
注册运用封闭办法是为了便于阻拦一些体系过错。
在整个运用恳求的生命周期过程中,假如抛出了反常或许严重过错,均会导致运用提前完毕,并呼应输出反常和过错信息。
5、运用初始化
履行运用的第一步操作便是对运用进行初始化,包含:
加载运用(公共)装备;
加载运用状况装备;
加载别号界说;
加载行为界说;
加载公共(函数)文件;
加载扩展装备文件(由extra_config_list界说);
加载扩展函数文件(由extra_file_list界说);
设置默许时区;
加载体系语言包;
6、URL拜访检测
运用初始化完结后,就会进行URL的拜访检测,包含PATH_INFO检测和URL后缀检测。
5.0的URL拜访有必要是PATH_INFO办法(包含兼容办法)的URL地址,例如:
所以,假如你的环境只能支撑一般办法的URL参数拜访,那么有必要运用
假如是命令行下面拜访进口文件的话,则经过
$php index.php index/index/hello/val/value...
获取到正常的$_SERVER['PATH_INFO']
参数后才干持续。
7、路由检测
假如敞开了url_route_on参数的话,会首先进行URL的路由检测。
假如一旦检测到匹配的路由,依据界说的路由地址会注册到相应的URL调度。
5.0的路由地址支撑如下办法:
路由到模块/控制器/操作;
路由到外部重定向地址;
路由到控制器办法;
路由到闭包函数;
路由到类的办法;
路由地址或许会受域名绑定的影响。
假如封闭路由或许路由检测无效则进行默许的模块/控制器/操作的剖析辨认。
假如在运用初始化的时分指定了运用调度办法,那么路由检测是可选的。
能够运用 \think\App::dispatch()
进行运用调度。
8、分发恳求
在完结了URL检测和路由检测之后,路由器会分发恳求到对应的路由地址,这也是运用恳求的生命周期中最重要的一个环节。
在这一过程中,完结运用的事务逻辑及数据回来。
主张一致运用return回来数据,而不是echo输出,如非必要,请不要履行exit中止。
直接echo输出的数据将无法进行主动转化呼应输出的便当。
下面是体系支撑的分发恳求机制,能够依据状况挑选:
模块/控制器/操作
这是默许的分发恳求机制,体系会依据URL或许路由地址来判别当时恳求的模块、控制器和操作名,并主动调用相应的拜访控制器类,履行操作对应的办法。
该机制下面,首先会判别当时模块,并进行模块的初始化操作(和运用的初始化操作相似),模块的装备参数会掩盖运用的没有收效的装备参数。
支撑模块映射、URL参数绑定到办法,以及操作绑定到类等一些功用。
控制器办法
和前一种办法相似,仅仅无需判别模块、控制器和操作,直接分发恳求到一个指定的控制器类的办法,因而没有进行模块的初始化操作。
外部重定向
能够直接分发恳求到一个外部的重定向地址,支撑指定重定向代码,默许为301重定向。
闭包函数
路由地址界说的时分能够直接选用闭包函数,完结一些相对简略的逻辑操作和输出。
类的办法
除了以上办法外,还支撑分发恳求到类的办法,包含:
静态办法:
'blog/:id'=>'\org\util\Blog::read'
类的办法:
'blog/:id'=>'\app\index\controller\Blog@read'
9、呼应输出
控制器的一切操作办法都是return回来而不是直接输出,体系会调用Response::send
办法将终究的运用回来的数据输出到页面或许客户端,并主动转化成default_return_type
参数装备的格局。所以,运用履行的数据输出只需要回来一个正常的PHP数据即可。
10、运用完毕
事实上,在运用的数据呼应输出之后,运用并没真实的完毕,体系会在运用输出或许中止后进行日志保存写入操作。
体系的日志包含用户调试输出的和体系主动生成的日志,一致会在运用完毕的时分进行写入操作。
而日志的写入操作受日志初始化的影响。
期望本文所述对咱们根据ThinkPHP结构的PHP程序设计有所协助。
本文地址:http://www.anyuan2002.com/bcdm/91510.html