if(isset($path)) {
$var[C('VAR_ACTION')] = array_pop($path);
if(!empty($path)) {
$var[C('VAR_CONTROLLER')] = array_pop($path);
}
if(!empty($path)) {
$var[C('VAR_MODULE')] = array_pop($path);
}
}这里的处理过程导致将最后一个参数当成是操作处理。所以我这边的优化方向是if(isset($path)) {
// 优化
if (defined('MODULE_NAME')) {
if (MODULE_NAME == $path[0]) {
array_shift($path);
}
} else {
$var[C('VAR_MODULE')] = array_shift($path);
}
if (!empty($path)) {
$var[C('VAR_CONTROLLER')] = array_shift($path);
}
if (!empty($path)) {
$var[C('VAR_ACTION')] = array_shift($path);
}
// 解析剩余的URL参数
if (C('URL_PARAMS_BIND') && 1 == C('URL_PARAMS_BIND_TYPE')) {
// URL参数按顺序绑定变量
$tempVar = array();
if (!empty($path)) {
foreach($path as $v){
$tempVar[]=$v;
}
}
$var = array_merge($var,$tempVar);
}
// tp core
// $var[C('VAR_ACTION')] = array_pop($path);
// if(!empty($path)) {
// $var[C('VAR_CONTROLLER')] = array_pop($path);
// }
// if(!empty($path)) {
// $var[C('VAR_MODULE')] = array_pop($path);
// }
}这样优化后能正确匹配正则路由,而不会错误绑定参数的情况,但是以上修改后,匹配参数是前往后填充参数,而TP 是后往前匹配参数,ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。