#1 Lucups
最近要维护一个在学校时开发的项目,看看以前的代码,觉得太坑,索性重写。由于服务器环境太老,最近刚上手的symfony无法派上用场,于是开始寻找一个新的适用于简单的项目、古老的环境的框架,经过筛选,最终决定采用SpeedPHP。
由于习惯了symfony的编码风格,喜欢给控制器加个Controller,动作加个Action(比如,MainController,indexAction),但这样一来,路由就麻烦了,想来想去,论坛里找找没找到解决办法,又舍不得放弃SpeedPHP,毕竟学习成本极低,上手超容易,而且挺方便,最后决定看源码。
看了源码才发现源码原来如此清晰~~赞一个,很快找到解决办法,看到这段代码的时候,心中一喜~
// 在使用PATH_INFO的情况下,对路由进行预处理
if(TRUE == $GLOBALS['G_SP']['url']["url_path_info"] && !empty($_SERVER['PATH_INFO'])){
$url_args = explode("/", $_SERVER['PATH_INFO']);$url_sort = array();
for($u = 1; $u < count($url_args); $u++){
if($u == 1)$url_sort[$GLOBALS['G_SP']["url_controller"]] = $url_args[$u];
elseif($u == 2)$url_sort[$GLOBALS['G_SP']["url_action"]] = $url_args[$u];
else {$url_sort[$url_args[$u]] = isset($url_args[$u+1]) ? $url_args[$u+1] : "";$u+=1;>
if("POST" == strtoupper($_SERVER['REQUEST_METHOD'])){$_REQUEST = $_POST = $_POST + $url_sort;
}else{$_REQUEST = $_GET = $_GET + $url_sort;}
}
// 构造执行路由
$__controller = isset($_REQUEST[$GLOBALS['G_SP']["url_controller"]]) ?
$_REQUEST[$GLOBALS['G_SP']["url_controller"]] :
$GLOBALS['G_SP']["default_controller"];
$__action = isset($_REQUEST[$GLOBALS['G_SP']["url_action"]]) ?
$_REQUEST[$GLOBALS['G_SP']["url_action"]] :
$GLOBALS['G_SP']["default_action"];
这构造执行后的路由不正是我想要的吗?果断在后面加上这两行:
// Start: add by Lucups
$__controller .= 'Controller';
$__action .= 'Action';
// End: add by Lucups
试了一下,果然有效~Nice!
修改前: http://localhost/speedphp/index.php/MainController/indexAction
修改后:http://localhost/speedphp/index.php/main/index
(注:开启了PATH_INFO)
2013-10-22 00:23:37