Yii框架原理简介

夏永锋

2014-11-26 @ 众成聚乐部

缘起

  1. 因为Yii的文档很渣
  2. 为了充分了解框架的能力
  3. 知其所以然

请求初始化

  • Yii::app()应用容器
  • 核心组件加载
  • 配置加载 - params、components、urlManager等
    • PHP对象属性赋值的规则:
      1. 如果该对象有public的该属性,则直接赋值
      2. 否则看该对象所在继承树上是否有定义魔术方法__set,如果有则调用__set来处理赋值过程
      3. 如果连__set也没有,则为该对象生成一个public的属性,然后赋值给它
  • 应用容器继承树:CWebApplication -> CApplication -> CModule -> CComponent

路由解析分发

  • 两种路由形式:
    • get, 如:r=controllerID/actionID
    • path, 如:/controllerID/actionID
  • 路由规则解析
    • 路由规则缓存
  • 路由规则匹配
  • 路由分发
  • 过滤器, VS. beforeAction
    • 过滤器实现原理

组件集成

  • 延迟初始化/懒加载
  • 组件对象赋值逻辑
  • init方法

Model层实现

  • 两种使用方式:
    1. CDbConnection + CDbCommand
    2. CActiveRecord
  • 两种方式的关系
  • Model层查询缓存
  • CActiveRecord的Schema问题

模板引擎集成

  • 作为普通组件的问题
  • 依赖于接口,而不依赖于实现

缓存

  • 框架中哪些地方基于缓存进行性能优化?
  • 支持多种缓存后端
  • 多应用共缓存的key冲突问题
  • 缓存依赖

应用模块化

  • 应用与模块的关系与区别
    • 继承树:CWebModule -> CModule -> CComponent
    • 组件配置
  • 模块对路由的影响
  • 模块嵌套,模块归属链
  • 正常使用模块
    • 要么全部模块化,要么不使用模块
    • 不要使用模块嵌套

进一步阅读

谢 谢!