config.CONTROLLER_LEVEL=2
'URL_MAP_RULES'=>array(
'Home/Index/get' => 'Home/Index/getDo',
目录:
Application
-Home
--Controller
---Home
-------IndexControll.class.php
---------public function getDo(){}
访问:
localhost/Home/Home/Index/get
这时提示找不到 Index控制器
查看了Think/Route.class.php 发现在第142行,function parseUrl 函数并没有对控制器分层进行判断
// 解析规范的路由地址
// 地址格式 [控制器/操作?]参数1=值1&参数2=值2...
private static function parseUrl($url) {
$var = array();
if(false !== strpos($url,'?')) { // [控制器/操作?]参数1=值1&参数2=值2...
$info = parse_url($url);
$path = explode('/',$info['path']);
parse_str($info['query'],$var);
}elseif(strpos($url,'/')){ // [控制器/操作]
$path = explode('/',$url);
}else{ // 参数1=值1&参数2=值2...
parse_str($url,$var);
}
if(isset($path)) {
$var[C('VAR_ACTION')] = array_pop($path);
if(!empty($path)) {
$var[C('VAR_CONTROLLER')] = array_pop($path);
//我只能自个加上这一行了,这算是bug么,还是说还有其它解决方法?
if(C('CONTROLLER_LEVEL')==2){
$var[C('VAR_CONTROLLER')] = array_pop($path).'/'.$var[C('VAR_CONTROLLER')];
}
//----------修正结束
}
if(!empty($path)) {
$var[C('VAR_MODULE')] = array_pop($path);
}
}
return $var;
}[官方得到的$_GET = array('m'=>'Home','c'=>'Index','a'=>'getDo'),这样找不到分层下的Home/Index
我希望得到的是
$_GET = array('m'=>'Home','c'=>'Home/Index','a'=>'getDo'),这样才能正确找到控制器路径。。
]
PS:为什么get是controller的内置方法啊。。。我的项目不得不用get这个名字啊,又不想重写controller的内置方法,所以我只能用路由来替换一下,这个,同学们有啥好解决方法没有呀
最佳答案