3.1 日志路由组件
1 每个Http请求,可能需要记录多条日志
2 每条日志可以从2个纬度来进行分类:日志的严重级别、日志的业务逻辑
业务逻辑分为:数据库操作日志、用户中心接口日志、Drmc接口日志、Memcache更新日志等
严重级别分为:trace、info、profile、warning、error。
一次Http请求的过程中,记录的日志的处理流程分为如下5个阶段:
Step1:根据日志路由器的配置信息,生成各个日志记录对象,即CFileLogRoute、CEmailLogRoute、CWebLogRoute对象,日志路由组件统一管理这些对象
Step2:程序员调用写日志的接口记录日志,所有的日志都是暂时保存在一个PHP的数组缓冲区中
Step3:当缓冲区满的时候或请求处理结束的时候,会触发一个Flush事件。通知日志路由组件来获取日志,这里使用的就是观察者模式
Step4:每个日志记录对象分别取出自己需要的日志,比如数据库的日志、用户中心交互日志、error级别的日志等、即各取所需
Step5:每个日志记录对象分别保存自己的日志。CFileLogRoute对象把日志保存到文件中,CEmailLogRoute对日志进行发送邮件;CWebLogRoute把日志输出到web页面上
3.2 Url管理组件
Url管理组件主要提供了两个功能:
1 根据用户输入的url,解析出处理这个请求的路由--由哪个Controller的哪个Action来处理,同时将url的部分参数添加到$_GET参数中。
2 根据路由和参数来创建url
CUrlRule是管理URL的核心,接下来分析CUrlRule的工作原理
1 初始化CUrlRule对象
在CUrlRule对象的构造函数中,会初始化6各重要的成员变量
2 解析url
解析Url的工作分3步走:a 根据pattern规则,解析出url中的各个字段 b 根据references对路由中的引用字段进行替换 c 将params指定的字段添加到$_GET数组中
3 创建url
创建Url的工作分3步走:a 根据routePattern规则,解析出输入的路由中各个字段 b 将输入的参数数组和上一步解析的数组进行合并 c用合并的数组对template进行替换
3.3 异常处理组件
CApplication将它的handleException/handleError方法注册为事件处理句柄,即CApplication得到所有的异常,然后将它交给异常处理组件处理
异常处理最主要的工作是给浏览器端展示异常信息,一般都是将异常交给某个Action来展示;如果是正常请求,就返回一个异常页面,如果是ajax请求,就返回一个json,由浏览器端的javascript对json进行展示
3.4 Cache组件
使用缓存可以很好的额提升web系统的性能,常用的缓存有:memcache、apc和redis等,YII定义了CCache类,为访问各种缓存定义了统一的接口。
3.5 角访问控制组件
YII通过CAuthManager组件实现了分等级的RBAC机制
3.6 全局状态组件
该组件用于存储持久化信息,这些信息会被序列化后保存到application.runtime.state.bin文件中,该组件提供了两个接口
CApplication使用该组件类进行持续存储,