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.ini中date.timezone设置分析
Jul 29 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
浅析php原型模式
Nov 25 PHP
Linux中为php配置伪静态
Dec 17 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
php注册登录系统简化版
Dec 28 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 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
Destoon模板制作简明教程
2014/06/20 PHP
php实现求相对时间函数
2015/06/15 PHP
PHP实现的日历功能示例
2018/09/01 PHP
调试php程序的简单步骤
2019/10/04 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
初识Node.js
2015/03/20 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
javascript input输入框模糊提示功能的实现
2017/09/25 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
党的群众路线教育实践方案
2014/05/11 职场文书
应届生求职信范文
2014/06/30 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
python计算列表元素与乘积详情
2022/08/05 Python