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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
[原创]效率较高的php下读取文本文件的代码
Jul 02 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
php全角字符转换为半角函数
Feb 07 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
Nov 22 PHP
PHP对文件进行加锁、解锁实例
Jan 23 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
Jul 29 PHP
php简单实现sql防注入的方法
Apr 22 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 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
解析thinkphp的左右值无限分类
2013/06/20 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例
2014/08/04 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
Vue 解决通过this.$refs来获取DOM或者组件报错问题
2020/07/28 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
Python玩转Excel的读写改实例
2019/02/22 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
Python面向对象封装操作案例详解
2019/12/31 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python中格式化字符串的四种实现
2020/05/26 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
中医专业应届生求职信
2013/11/17 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
2015年暑假工作总结
2015/07/13 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书