Cakephp 执行主要流程


Posted in PHP onMarch 24, 2010

加载基本文件
cake/basics.php 里面定义了常用的方法以及时间常量
$TIME_START = getMicrotime(); 记录开始执行时间
cake/config/paths.php 里面定义一些基本路径
cake/lib/object.php cake的基本类
cake/lib/inflector.php 这里主要是处理单复数,带下划开命名以及驼峰式命名
cake/lib/configure.php 里面提供文件配置的读写,路径的设置,以及加载文件的方法
cake/lib/cache.php 缓存的操作

Configure::getInstance(); 开始对项目的配置
config/core.php 项目的配置文件
config/bootstrap.php 项目的入口文件

App::import(‘Core', array(‘Dispatcher')); 加载核心,开始做正事了,GO
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch($url); 开始执行,通过对当前的url解析,如果你设置了压缩Js、Css,则对这些文件压缩输出,如果你对页面设置缓存,则直接输出缓存页面,最后查找相应的Controller。如果找不到,则进行相应的错误处理。
实例化当前Controller,确定视图路径,实例化Component,获得仅当前Controller[不包含父类Controller]的方法
对当前Controller中私有方法、带admin路由或者带prefix的方法进行保护,不允许直接访问
设置当前Controller的基本属性,如base、here、webroot、plugin、params、action、 passedArgs[array_merge($this->params['pass'],$this->params['named'])]
调用Controller中的constructClasses方法
执行__mergeVars方法,该方法对父子类的components、helpers、uses等属性进行特殊合并处理
调用Component->init()方法,载入用户设置的系列components(Session为默认),并默认enabled属性为true。(该属性可以后期在beforeFilter里修改)
调用Component->initialize()方法,若系列components里有这个initialize方法并且该component 的enabled为true,则调用该components->initialize方法(这里enabled用户好像无法通过 Controller设置,只能为true)
调用当前Controller中beforeFilter()方法,这个方法是个好东西^_^
调用Component->startup()方法,同样,若系列components里有这个startup方法并且该component的 enabled为true,则调用该components->startup方法(这里enabled倒是可以通过beforeFilter设 置),该方法也是components里最重要的方法,比如Auth就在这里大作文章^_^
开始执行当前Controller里的Action方法
如果设置autoRender为true,则根据调用当前Controller的render()方法,否则返回或输出Action方法的返回的数据
调用Controller的render()方法时,先调用当前Controller中的beforeRender()方法
加载视图渲染类
调用Component->beforeRender()方法,同样,若系列components里有这个beforeRender方法并且该 component的enabled为true,则调用该components->beforeRender方法(这里enabled可以通过 beforeFilter设置)
获取当前Model的数据验证错误信息,给View使用
调用View的render()方法
载入相关Helper助手
调用Helper的beforeRender()方法
调用Helper的afterRender()方法
相关的缓存处理
执行renderLayout()方法,当然前提你要允许渲染布局,默认为default.ctp布局文件
调用Helper的beforeLayout()方法
调用Helper的afterLayout()方法
调用Component->shutdown()方法,同样,若系列components里有这个shutdown方法并且该component的 enabled为true,则调用该components->shutdown方法(这里enabled可以通过beforeFilter设置)
执行当前Controller里的afterFilter方法,这里你可以对视图的输出内容($controller->output)做一些处理
返回或输出视图数据。
流程完毕。

PHP 相关文章推荐
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
PHP采集类Snoopy抓取图片实例
Jun 19 PHP
PHP将session信息存储到数据库的类实例
Mar 04 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
实现php删除链表中重复的结点
Sep 27 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
php中的观察者模式
Mar 24 #PHP
PHP 获取远程文件内容的函数代码
Mar 24 #PHP
PHP中基本符号及使用方法
Mar 23 #PHP
PHP技术开发技巧分享
Mar 23 #PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 #PHP
PHP5 字符串处理函数大全
Mar 23 #PHP
Smarty Foreach 使用说明
Mar 23 #PHP
You might like
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php 邮件发送问题解决
2014/03/22 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
2017/02/14 Javascript
js a标签点击事件
2017/03/30 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Python生成并下载文件后端代码实例
2020/08/31 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
护理专业毕业生自我鉴定
2013/10/08 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
2014学雷锋活动心得体会
2014/03/10 职场文书
艺术设计专业个人求职信
2014/04/10 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
优秀教师推荐材料
2014/12/16 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python