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 相关文章推荐
1.PHP简介
Oct 09 PHP
用PHP查询域名状态whois的类
Nov 25 PHP
php session 检测和注销
Mar 16 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
完美的php分页类
Oct 24 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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
在线增减.htpasswd内的用户
2006/10/09 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
python的launcher用法知识点总结
2020/08/07 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
python+opencv实现车道线检测
2021/02/19 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
描述内存分配方式以及它们的区别
2016/10/15 面试题
毕业生大学生活自我总结
2014/01/31 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
民间借贷被告代理词
2015/05/23 职场文书
运动会5000米加油稿
2015/07/21 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书