1、原则
吸收作者的思想为我所用
不能像看小说一样走马观花,每个方法都要弄清楚,遇到不明白的方法就要看手册,并记录亮点的地方。
三部曲:
1、开始前写好用例,弄好环境
2、分析的时候要做好记录
3、完了做好总结
2、开始操作以一个CMS 为例
准备操作:
1、服务器环境
2、手册准备好
3、编辑器准备好
分析路线图:
分析用例:
1、前端显示部分
首页:导航、内容、友情链接
1、文章 分类:新闻、产品、系统公告 功能:摘要、列表、分页、详细
2、图片 幻灯、产品、公司介绍图片
3、单页 公司介绍、人才招聘
2、后台管理模块
1、文章、新闻、产品、单页的CURD
2、图片、视频上传
3、链接添加删除
4、留言管理
5、招聘管理
3、开始分析做笔记
1、在components下面找到了一个截取utf8的类,原理是utf8使用变长的方式,1-3个字节表示一个字符, 如果第一个字符的ascll 值大于224那么后面3个字节组成一个汉字。如果大于192的就是2个字节组成,如果大于65就是字母,一个字节组成,小于65就是标点。
分析了下写了另一篇博客。
2、 系统前台定义了前台控制器基类
1 /** 2 * @name 前台控制器基类 3 */ 4 class Controller extends CController 5 { 6 /** 7 * @name 设置默认视图 8 */ 9 public $layout='//layouts/main'; 10 public $action_id; 11 public $controller_id; 12 public $page_id; 13 public $referrer; 14 15 protected function beforeAction($action) 16 { 17 $this->controller_id = Yii::app()->controller->id; 18 $this->action_id = Yii::app()->controller->action->id; 19 $this->page_id = $this->controller_id.'/'.$this->action_id; 20 $this->referrer = Yii::app()->request->getUrlReferrer(); 21 return true; 22 } 23 }
定义了布局文件的位置,和参数,统一前台页面的风格
3、值得注意的是一个beforeAction方法
形式如下
protected function beforeAction($action){}
这样Yii会在action前去执行这部分代码,可以初始化一部分数据,比如
$this->controller_id = Yii::app()->controller->id; //定义控制器Id $this->action_id = Yii::app()->controller->action->id; //定义actionID $this->page_id = $this->controller_id.'/'.$this->action_id; //当前页面ID $this->referrer = Yii::app()->request->getUrlReferrer(); //返回url return true; //如果返回false停止执行
4、浏览了一边前端的Controller
基本思路为
使用beforAction()初始化一些脚本样式,然后每个action 实例化相关的Behavior,使用behavior得到数据,最后使用$this->render渲染到页面上
5、前端主要就是展示的页面,没有太多的逻辑,然后分析后端的admin模块代码,开始分析管理员的登陆过程
登陆的步骤整理为:
1、判断是否已经登陆,如果已经登陆,转向页面
2、验证输入,数据格式,这里使用一个formModel来操作验证比较好
3、继续2步骤,严格验证密码(使用UserIdentity类来进行验证)
4、登陆或者返回错误
5、写入session数据,然后转向
突然想起:
写一个方法的技巧:
参数、过程、返回 即输入、操作、输出
关于model,像类似删除的操作应该类似 对象->delete(),不要写成delete($id),应为要对象存在才能删除,前者更加面向对象
6、登陆成功后依次分析下面的模块,首先是登陆日志功能
这里有一个技术点:分页
来看下分页原理:
1 //登陆成功后,显示登陆日志,然后分页 2 public function userlog(){ 3 $criteria = new CDbCriteria; //条件 4 $criteria->order='last_time desc'; //排序方式 5 6 $count=User::model()->count($criteria); //计算记录条数 7 $pages=new CPagination($count); //实例化分页类 8 $pages->pageSize=10; //设置分页数据 9 $pages->applyLimit($criteria); //应用分页条件 10 $users = User::Model()->findAll($criteria); //获取数据 11 12 return compact('users','pages'); 13 }
view页面使用了一个widget来接收数据
<?php $this->widget("CFLinkPagerAdminWidget",array("pages"=>$pages));?>
7、开始分析视频管理模块
对视频的操作具有一下:
1、上传 2、上传封面 3、编辑 4、禁用 5、列表 6、显示 7、存储 8、查找
上传分析: