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
我的论坛源代码(五)
Oct 09 PHP
php获取某个目录大小的代码
Sep 10 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
May 12 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
laravel中命名路由的使用方法
Feb 24 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
php数组遍历类与用法示例
May 24 PHP
PHP实现关键字搜索后描红功能示例
Jul 03 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP完整的日历类(CLASS)
2006/11/27 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
10条php编程小技巧
2015/07/07 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
学习jQuey中的return false
2015/12/18 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
vuex与组件联合使用的方法
2018/05/10 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
PHP如何删除一个Cookie值
2012/11/15 面试题
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
网络方面基础面试题
2012/11/16 面试题
木马的传播途径主要有哪些
2016/04/08 面试题
员工拓展培训方案
2014/02/15 职场文书
《石榴》教学反思
2014/03/02 职场文书
爱心倡议书范文
2014/05/12 职场文书
2015年人事科工作总结
2015/04/28 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL