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 远程关机实现代码
Nov 10 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
Apr 04 PHP
php如何修改SESSION的生存存储时间的实例代码
Jul 05 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 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微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
简单的js分页脚本
2009/05/21 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
document.createElement()用法
2013/03/13 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
通过实例学习Python Excel操作
2020/01/06 Python
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
Delphi笔试题
2016/11/14 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
CNC数控操作工岗位职责
2013/11/19 职场文书
出纳员岗位职责风险
2014/03/06 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
合伙经营协议书范本
2014/04/18 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
微笑服务演讲稿
2014/05/13 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
乒乓球比赛通知
2015/04/27 职场文书
革命电影观后感
2015/06/18 职场文书
家长会感言
2015/08/01 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL
HTML+JS实现在线朗读器
2022/02/15 Javascript