一 目录文件 |-framework 框架核心库 |--base 底层类库文件夹,包含Capplication(应用类,负责全局的用户请求处理,它管理的应用组件集,将提供特定功能给整个应用程 序),CComponent(组件类,该文件包含了基于组件和事件驱动编程的基础类,从版本1.1.0开始,一个行为的属性(或者它的公共成员变量或它通 过getter和/或setter方法??定义的属性)可以通过组件的访问来调用),CBehavior(行为类,主要负责声明事件和相应事件处理程序的 方法、将对象的行为附加到组件等等),CModel(模型类,为所有的数据模型提供的基类),CModule(是模块和应用程序的基类,主要负责应用组件 和子模块)等等 |--caching 所有缓存方法,其中包含了Memcache缓存,APC缓存,数据缓存,CDummyCache虚拟缓存,CEAcceleratorCache缓存等等各种缓存方法 |--cli YII项目生成脚本 |--collections 用php语言构造传统OO语言的数据存储单元。如:队列,栈,哈希表等等 |--console YII控制台 |--db 数据库操作类 |--gii YII 代码生成器(脚手架),能生成包括模型,控制器,视图等代码 |--i18n YII 多语言,提供了各种语言的本地化数据,信息、文件的翻译服务、本地化日期和时间格式,数字等 |--logging 日志组件,YII提供了灵活和可扩展的日志记录功能。消息记录可分为根据日志级别和信息类别。应用层次和类别过滤器,可进一步选择的消息路由到不同的目的 地,例如文件,电子邮件,浏览器窗口,等等|--messages 提示信息的多语言 |--test YII提供的测试,包括单元测试和功能测试 |--utils 提供了常用的格式化方法 |--validators 提供了各种验证方法 |--vendors 这个文件夹包括第三方由Yii框架使用的资料库 |--views 提供了YII错误、日志、配置文件的多语言视图 |--web YII所有开发应用的方法 |---actions 控制器操作类 |---auth 权限认识类,包括身份认证,访问控制过滤,基本角色的访问控制等 |---filters 过滤器,可被配置在控制器动作执行之前或之后执行。例如, 访问控制过滤器将被执行以确保在执行请求的动作之前用户已通过身份验证;性能过滤器可用于测量控制器执行所用的时间 |---form 表单生成方法 |---helpers 视图助手,包含GOOGLE Ajax API,创建HTML,JSON,javaSCRipT相关功能 |---js JS库 |---renderers 视图渲染组件 |---services 封装SoapServer并提供了一个基于WSDL的Web服务 |---widgets 部件 |---CArrayDataPRovider.php 可以配置的排序和分页属性自定义排序和分页的行为 |---CActiveDataProvider.php ActiveRecord方法类 |---CController.php 控制器方法,主要负责协调模型和视图之间的交互 |---CPagination.php 分页类 |---CUploadedFile.php 上传文件类 |---CUrlManager.php URL管理 |---CWebModule.php 应用模块管理,应用程序模块可被视为一个独立的子应用 等等方法 |--.htaccess 重定向文件 |--yii.php 引导文件 |--YiiBase.php YiiBase类最主要的功能是注册了自动加载类方法,加载框架要用到所有接口。 |--yiic Yii linux 命令行脚本 |--yiic.bat YII WINDOW 命令行脚本 |--yiilite.php 它是一些常用到的 Yii 类文件的合并文件。在文件中,注释和跟踪语句都被去除。因此,使用 yiilite.php 将减少被引用的文件数量并避免执行跟踪语句 二 源码分析 1. 启动 网站的唯一入口程序 index.php :
1. $yii =dirname( __FILE__ ). '/../framework/yii.php' ;
2. $config =dirname( __FILE__ ). '/protected/config/main.php' ;
3.
4.
5. defined( 'YII_DEBUG' ) or define( 'YII_DEBUG' ,true);
6.
7. require_once ( $yii );
8. Yii::createWebApplication( $config )->run(); 上面的 require_once ( $yii ) 引用出了后面要用到的全局类Yii,Yii类是YiiBase类的完全继承:
1. class Yii extends YiiBase
2. {
3. } 系统的全局访问都是通过Yii类(即YiiBase类)来实现的,Yii类的成员和方法都是 static 类型。 2. 类加载 Yii利用PHP5提供的spl库来完成类的自动加载。在YiiBase.php 文件结尾处
1. spl_autoload_register( array ( 'YiiBase' , 'autoload' )); 将YiiBase类的静态方法autoload 注册为类加载器。 PHP autoload 的简单原理就是执行 new 创建对象或通过类名访问静态成员时,系统将类名传递给被注册的类加载器函数,类加载器函数根据类名自行找到对应的类文件并 include 。 下面是YiiBase类的autoload方法:
1. public static function autoload( $className )
2. {
3.
4. if (isset(self:: $_coreClasses [ $className ]))
5. include (YII_PATH.self:: $_coreClasses [ $className ]);
6. else if (isset(self:: $_classes [ $className ]))
7. include (self:: $_classes [ $className ]);
8. else
9. include
|