架构 ThinkPHP5文档学习笔记--( 三 )


2.4、注册错误和异常处理
// php核心框架错误处理文件 thinkphp/library/think/Error.phppublic static function register(){error_reporting(E_ALL);//错误处理方法 think\Error::appErrorset_error_handler([__CLASS__, 'appError']);//异常处理方法 think\Error::appExceptionset_exception_handler([__CLASS__, 'appException']);//应用关闭方法 think\Error::appShutdown 拦截一些系统错误 。register_shutdown_function([__CLASS__, 'appShutdown']);}
2.5、应用初始化
执行应用的第一步操作就是对应用进行初始化 , 包括:
2.6、URL访问检测
应用初始化完成后 , 就会进行URL的访问检测 , 包括检测和URL后缀检测 。
5.0的URL访问必须是方式(包括兼容方式)的URL地址 , 例如
http://serverName/index.php/index/index/hello/val/value
2.7、路由检测
如果开启了参数的话 , 会首先进行URL的路由检测 。
如果一旦检测到匹配的路由 , 根据定义的路由地址会注册到相应的URL调度 。

架构  ThinkPHP5文档学习笔记--

文章插图
路由地址可能会受域名绑定的影响 。
如果关闭路由或者路由检测无效则进行默认的模块/控制器/操作的分析识别 。
如果在应用初始化的时候指定了应用调度方式 , 那么路由检测是可选的 。
可以使用 \think\App::() 进行应用调度 , 例如:
App::([‘type’ => ‘’, ‘’ => ‘index/index’]);
2.8、分发请求
在完成了URL检测和路由检测之后 , 路由器会分发请求到对应的路由地址 , 这也是应用请求的生命周期中最重要的一个环节 。
在这一步骤中 , 完成应用的业务逻辑及数据返回 。
使用返回数据 , 而不是echo输出 , 如非必要 , 请不要使用exit或者die中断执行 。
直接echo输出的数据将无法进行自动转换响应输出的便利 。
这是默认的分发请求机制 , 系统会根据URL或者路由地址来判断当前请求的模块、控制器和操作名 , 并自动调用相应的访问控制器类 , 执行操作对应的方法 。
该机制下面 , 首先会判断当前模块 , 
并进行模块的初始化操作(和应用的初始化操作类似) , 
模块的配置参数会覆盖应用的尚未生效的配置参数 。
支持模块映射、URL参数绑定到方法 , 以及操作绑定到类等一些功能 。
和前一种方式类似 , 只是无需判断模块、控制器和操作 , 直接分发请求到一个指定的控制器类的方法 , 因此没有进行模块的初始化操作 。
可以直接分发请求到一个外部的重定向地址 , 支持指定重定向代码 , 默认为301重定向 。
路由地址定义的时候可以直接采用闭包函数 , 完成一些相对简单的逻辑操作和输出 。
2.9、响应输出
控制器的所有操作方法都是返回而不是直接输出 , 系统会调用::send方法将最终的应用返回的数据输出到页面或者客户端 , 并自动转换成参数配置的格式 。所以 , 应用执行的数据输出只需要返回一个正常的PHP数据即可 。
2.10、应用结束
事实上 , 在应用的数据响应输出之后 , 应用并没真正的结束 , 系统会在应用输出或者中断后进行日志保存写入操作 。
系统的日志包括用户调试输出的和系统自动生成的日志 , 统一会在应用结束的时候进行写入操作 。