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原生模板引擎 最简单的模板引擎
Apr 25 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
Jul 28 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php四种定界符详解
Feb 16 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
php实现数组重复数字统计实例
Sep 30 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贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
JS cookie中文乱码解决方法
2014/01/28 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
基于python实现名片管理系统
2018/11/30 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
2020/01/08 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
input元素的url类型和email类型简介
2012/07/11 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
Farfetch巴西官网:奢侈品牌时尚购物平台
2020/10/19 全球购物
岗位职责范本
2013/11/23 职场文书
兼职学生的自我评价
2013/11/24 职场文书
后勤工作职责
2013/12/22 职场文书
二手书店创业计划书
2014/01/16 职场文书
工地安全检查制度
2014/02/04 职场文书
一年级学生评语
2014/04/23 职场文书
python基础之类属性和实例属性
2021/10/24 Python
如何解决php-fpm启动不了问题
2021/11/17 PHP
Python何绘制带有背景色块的折线图
2022/04/23 Python
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库