• 1. Yii框架简介
  • 2. 主要内容Yii框架的起源 一个浏览器请求的处理过程 组件 过滤器 模型层 视图层 命令行程序2
  • 3. Yii框架的起源美籍华人“qiang”于2008年1月开始开发YII框架(他原来是Prado框架的核心开发成员之一,维护该框架超过3年),YII框架的设计思想主要来源于( Prado , Ruby on Rails , jQuery , Symfony , Joomla )http://www.yiiframework.com/about/Yii 是一个基于组件、用于开发大型 Web 应用的高性能 PHP 框架。它将 Web 编程中的可重用性发挥到极致,能够显著加速开发进程。Yii(读作“易”)代表简单(easy)、高效(efficient)、可扩展(extensible)。3
  • 4. 支持的特性http://www.phpframeworks.com/4
  • 5. 性能http://www.yiiframework.com/performance/5
  • 6. 处理流程http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.mvc#sec-26
  • 7. 创建一个helloworld1、下载代码(http://www.yiiframework.com/download/) 2、使用命令行工具创建项目 3、 创建控制类与action http://www.yiiframework.com/doc/guide/1.1/zh_cn/quickstart.first-app-yiic7yiic.bat help webapp yiic.bat webapp E:\code\Yii\trunk\helloword yiic.bat shell E:\code\Yii\trunk\helloworld\index.php help controller post log cache db update detail add list
  • 8. 控制类与Action FE同学可能对服务器端的技术与运行模式不太了解,其实一个网站是由若干个控制类组成(这次项目使用17个控制类),每个控制类又有若干个action成员函数,用户的一个请求(不管是get/post/ajax)都是有一个action成员函数来处理,生成浏览器需要的html/json等每个控制类有一个ControllerId:site,my,XX 每个Action有一个ActionId:index,login,collectdesc8
  • 9. url路由组件1、通过用户输入的url找到处理这个请求的ControllerId和ActionId 2、解析出获得url中的get产生 http://yiiframework.com/doc/api/1.1/CUrlManager9
  • 10. (本页无文本内容)
  • 11. 组件池URL http://**** 浏览器请求路由组件 UrlManagerApp类PostControlleractionLogactionDetailPostControlleractionLogactionDetail日志组件Db组件Cache组件XXControlleractionYYactionZZ权限组件XX组件1、创建WebApplication 2、通过“路由组件”获得ControllerId和ActionId 3、创建“控制器” 4、运作Action方法11
  • 12. 日志路由组件 错误级别 日志类别Error 错误级别Warning 警告级别Info 基本操作Trace 调试级别applicationextensions.ucextensions.beidou1、记录一条日志,需要设置这2个维度的参数 Yii::log(‘悲剧,用户中心 挂了啊', CLogger::LEVEL_ERROR, 'extensions.uc');2、通过“日志路由组件”可以过滤出某些错误级别、某些类别的日志,见log的routes配置12
  • 13. 日志路由组件工作原理——观察者模式13
  • 14. 其它常用组件Cache组件——缓存作用 Db组件——数据库查询 Auth认证组件——基于角色的权限验证 组件特点1、按需创建:如果一个组件在本次用户请求中没有被使用,它根本不被创建。 2、单件模式:如果一个组件在多个地方使用,那么只有第一次使用的时候需要创建,以后每次使用,都是使用同一个组件对象3、配置简单:通过修改app应用的components配置项可以很方便的对组件进行添加、删除和修改14
  • 15. 过滤器与Action1、过滤器是控制器的一个成员函数,以filter打头,比如function filterSpend( ),那么这个过滤器的名字就是spend2、可被配置在控制器动作执行之前或之后执行3、一个过滤器作用于多个Action,一个Action可以配置多个过滤器,配置很方便15
  • 16. 过滤器工作模型actionCachefilterSpendfilterAjax过滤器用途1、统计:统计各个action每天被访问的次数,统计部分action的耗时2、访问控制:指定某些action的必须是Ajax访问,指定某些action访问需要的权限或者角色,如上是本次项目的权限控制配置16
  • 17. 模型层——ORM使用脚本创建模型层代码 cd E:\code\Yii\trunk\helloworld\protected yiic.bat shell E:\code\Yii\trunk\helloworld\index.php model *17ORM使用的是ActiveRecord技术 即一张表对应一个对象,基本不需要些sql http://127.0.0.1/helloworld/index.php/post/add 表之间的关联(1:1,1:n,n:1,n:m)通过relation来申明 http://127.0.0.1/helloworld/index.php/post/list
  • 18. 视图层视图层就是生成浏览器需要的html代码(中间可能包含js和css)Yii的将试图的生成分成3步,比如: http://127.0.0.1/demos/blog/目前使用模板引擎smarty,对于公共的页面片断使用include语法18
  • 19. 小物件在windows(MFC,Delphi,游戏)开发过程中,有很多小控件(下拉菜单/按钮/日历/人物)可以使用,不需要从头开发。一个key=>value的数字 Array( ‘date’=>’2010-11-2’, ‘weather’=>’多云’ ‘city’=>’北京’ ‘skin’=>’red’//’grey’ )日历widget日历控件的html:
    • XXXX
    需要a.js,b.js需要a.css,b.css输入输出19小物件( Cwidget) 的设计思想与其类似,它将页面看成是有多个可以复用的控件组成,从而提高了页面控件的复用性和可维护性。小物件的用法:widget(‘path.to.WidgetClass’); ?>,它会生成对应的html代码和需要的css以及js。Yii自带了20个左右的常用widget,开源社区目前也贡献了100多个widget。 小物件可以配置多套皮肤(国庆用红色的,清明用灰色的)
  • 20. 代价:a)需要Fe会php,基本的php语法、类的使用 b)需要rd会一些简单的js和html 客户端脚本管理组件(Yii::app()->clientScript)的功能: 1 ) 将js,css插入到固定的位置(HEAD/BEGIN/END/LOAD/READY) 2 ) 修改这个组件的配置,可以对js/css应用的路径进行替换或者合并,对外部透明,比如开发的使用使用home_dev.js,真正上线的时候使用home.js 3) 修改这个组件的配置,可以对js/css进行合并和进行版本控制 20
  • 21. 命令行创建一个TotalCommand继承自CConsoleCommand 配置console.php中需要使用的组件命令行程序创建的“app应用”是CConsoleApplication,web访问创建的应用时CWebApplication,其实“应用”时一个模板的概念,一个模板有一个组件池,可以配置这个模板需要的组件21cd E:\code\Yii\trunk\helloworld\protected yiic.bat 哈哈,所有的命令都有,系统的也有,系统其实也是写了一个XXCommand yiic.bat total user yiic.bat total post yiic.bat total comment
  • 22. Yii作者推荐书籍(http://yiiframework.com/tutorials/)大概整理了一下,下载地址为:http://gaojie360.cn/yii_book.rar22
  • 23. 谢谢大家! 23