FleaPHP 使用 Simple 调度器的 MVC 处理流程
时间:2008-04-12 来源:qeeify
这篇文章清晰的描述了在 FleaPHP 中使用 FLEA_Dispatcher_Simple 作为调度器时,应用程序是如何从 index.php 开始执行直到整个流程结束的。这篇文章对于理解 FleaPHP 应用程序的工作流程有极好的帮助。
本文来源网址:
http://www.fleaphp.org/bbs/viewthread.php?tid=2533
本文原作者:yk5515
执行 index.php
index.php 的主要任务是负责载入 FLEA.php 文件和应用程序设置,然后通过 FLEA::runMVC() 启动 MVC 模式。
runMVC()
runMVC() 首先根据应用程序设置 MVCPackageFilename 读取 Action 文件,这样确保后续载入控制器类时不会发生错误。接下来就是调用 FLEA::init() 初始化运行环境和构造调度器启动 MVC 了。
初始化环境 FLEA::init()
- 设置一个静态变量,防止重复调用
- 根据应用程序设置“exceptionHandler”安装一个异常处理,如果是PHP5就调用PHP自带的set_exception_handler安装这个异常,依然根据应用程序设置
- 根据应用程序设置“logEnabled”“ logProvider”载入日志“logProvider”,如果函数log_message不存在就定义一个空log_message()
- 读取缓存目录“internalCacheDir”,如果找不到,就使用FLEA默认的缓存目录
- 将& $_GET, & $_POST, &$_COOKIE, & $_REQUEST中addslashes()处理过的字符串还原,并关闭magic_quotes
- 判断如果应用程序设置中“urlMode”不是设置的标准模式就载入url分析过滤器
- 逐个读入应用程序设置” requestFilters”中的过滤器
- 判断应用程序设置“MVCPackageFilename”是否开启MVC模式,如果开启则调用action文件
- 逐个载入应用程序设置‘autoLoad’中的文件
- 载入应用程序设置sessionProvide中的 session 服务提供程序,并返回一个实例
- 根据应用程序设置autoSessionStart自动起用 session 会话
- 读取应用程序设置responseCharset和databaseCharset中定义的编码格式,并定义为常量
- 判断应用程序设置multiLanguageSupport是否设置了多语言,如果是则载入FLEA_Language,并返回一个实例
- 检查过滤函数_T是否存在,如果不存在定义一个空的
- 判断应用程序设置是否设置了autoResponseHeader(自动输出HTML的头信息),如果是就设置相应的编码格式
构造调度器
- 读取应用程序设置dispatcher的默认调度器并载入
- 执行调度器对象的构造函数
- 引用传入的GET信息赋值给_requestBackup
- 读取应用程序设置中的controllerAccessor和actionAccessor,默认为’controller’和’action’(这里用户可以自己修改这2个设置,把URL变的更短)
- 将传入的GET信息转换为小写并赋值给$r
- 构建空数组$data
- 检查$r中是否设置了控制器、动作,如果设置了就赋值给$data
- 把$data的值赋值给$this->_request
启动 MVC 模式
- 调用新建对象的dispatching函数
- 调用getControllerName和getActionName获取控制器名称和动作名称
- 正则过滤,匹配规则是大小写字母和数字
- 判断如果控制器名或者动作名为空就调用应用程序设置defaultController或defaultAction(默认控制器或动作名)
- 应用程序设置是否开启了将动作名和控制器强制转换成小写urlLowerChar,如果开启了就把名称转换成小写
- 返回动作或者控制器名称
- 正则过滤,匹配规则是大小写字母和数字
- executeAction执行Action方法
- 调度器失败以后调用的函数名(应用程序设置dispatcherFailedCallback)
- 设置方法名的前缀和后缀(应用程序设置actionMethodPrefix、actionMethodSuffix)
- 载入控制器,判断该类是否存在,如果不存在就退出循环
- 把当前处理的控制的名和动作名放到设置中
- 新建控制器对象
- 判断如果控制器中不存在指定方法,就退出循环
- 判断如果控制器中存在setController、setDispatcher和_beforeExecute方法,就执行
- 执行action方法
- 判断如果存在函数_afterExecute就执行
- 返回action执行结果
- 判断是否调用自定义的调度器失败处理函数,如果应用程序设置中设置了,就动态的运行此函数
- 如果控制器为空,调用出错处理FLEA_Exception_MissingController,抛出一个异常包括控制器名、动作名等信息, 返回false
- 调用出错处理FLEA_Exception_MissingAction,抛出异常同上, 返回false
- 调度器失败以后调用的函数名(应用程序设置dispatcherFailedCallback)
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:
http://www.fleaphp.org/
。
相关阅读 更多 +
排行榜 更多 +