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
自己前几天写的无限分类类
Feb 14 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
php学习之流程控制实现代码
Jun 09 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
PHP 布尔值的自增与自减的实现方法
May 03 PHP
php实现的PDO异常处理操作分析
Dec 27 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 PHP
Yii 实现数据加密和解密
Mar 09 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删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php格式化电话号码的方法
2015/04/24 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
javascript每日必学之继承
2016/02/23 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
基于python实现把图片转换成素描
2019/11/13 Python
python psutil监控进程实例
2019/12/17 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
2018/11/30 HTML / CSS
中学生爱国演讲稿
2013/12/31 职场文书
结婚喜宴主持词
2014/03/14 职场文书
2015年度物流工作总结
2015/04/30 职场文书
环保宣传语大全
2015/07/13 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python