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&mysql(四)
Oct 09 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
php json与xml序列化/反序列化
Oct 28 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
May 20 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
php中file_get_contents()函数用法实例
Feb 21 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 定界符格式引起的错误
2011/05/24 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
Laravel实现表单提交
2017/05/07 PHP
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
一个css与js结合的下拉菜单支持主流浏览器
2014/10/08 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
python代码能做成软件吗
2020/07/24 Python
Linux上比较文件的命令都有哪些
2013/09/28 面试题
静态变量和实例变量的区别
2015/07/07 面试题
Structs界面控制层技术
2013/10/11 面试题
IBatis持久层技术
2016/07/18 面试题
幼儿园园长自我鉴定
2013/10/22 职场文书
中专毕业生自我鉴定
2013/11/21 职场文书
团支部建设方案
2014/05/02 职场文书
疾病防治方案
2014/05/31 职场文书
市场推广策划方案
2014/06/02 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
党员进社区活动总结
2015/05/07 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python