Cakephp 执行主要流程
程序员文章站
2023-04-07 21:37:26
加载基本文件 cake/basics.php 里面定义了常用的方法以及时间常量 $time_start = getmicrotime(); 记录开始执行时间 cake/co...
加载基本文件
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)做一些处理
返回或输出视图数据。
流程完毕。
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 webshell检查工具 python实现代码
下一篇: 新买的电话卡