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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
php flv视频时间获取函数
Jun 29 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
Jun 24 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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
php adodb分页实现代码
2009/03/19 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python脚本实现自动发带图的微博
2016/04/27 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
优秀学生自我鉴定范例
2013/12/18 职场文书
保护环境建议书300字
2014/05/13 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年减负工作总结
2014/12/10 职场文书
高中生毕业评语
2014/12/30 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
React实现动效弹窗组件
2021/06/21 Javascript
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
Python尝试实现蒙特卡罗模拟期权定价
2022/04/21 Python
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript