thinkPHP3.2中已配置:'URL_CASE_INSENSITIVE' => true,对于控制器及操作名大小写都可以,但仍对于模块名的大小写就运行机制出错,
比如:http://www.xxxx.com/Home 这是正常的,但换成http://www.xxxx.com/home就出错,
解决方案如下
替换 parseTemplate
publicfunctionparseTemplate($template=''){
if(is_file($template)){
return$template;
}
$depr=C('TMPL_FILE_DEPR');
$template=str_replace(':',$depr,$template);
//获取当前模块
$module=MODULE_NAME;
if(strpos($template,'@')){//跨模块调用模版文件
list($module,$template)=explode('@',$template);
}
defined('THEME_PATH')ordefine('THEME_PATH',$this->getThemePath($module));
//分析模板文件规则
if(''==$template){
//如果模板文件名为空按照默认规则定位
$template=CONTROLLER_NAME.$depr.ACTION_NAME;
}elseif(false===strpos($template,$depr)){
$template=CONTROLLER_NAME.$depr.$template;
}
$file=THEME_PATH.$template.C('TMPL_TEMPLATE_SUFFIX');
if(C('TMPL_LOAD_DEFAULTTHEME')&&THEME_NAME!=C('DEFAULT_THEME')&&!is_file($file)){
$file=dirname(THEME_PATH).'/'.C('DEFAULT_THEME').'/'.$template.C('TMPL_TEMPLATE_SUFFIX');
}
//URl大小写转换
if(!is_file($file)){
$file=$this->Get_Url($file);
if(!is_file($file)){
$file=$this->Get_Url($file,1);
}
}
return$file;
}
privatefunctionGet_Url($f,$x=''){
$a=explode('/',$f);
$b=count($a)-1;
foreach($aas$k=>$v){
if($k==$b){
if(empty($x)){
$c.=ucfirst($v).'/';
}else{
$c.=strtolower($v).'/';
}
}else{
$c.=$v.'/';
}
}
returnrtrim($c,'/');
}
原文链接:https://www.f2er.com/thinkphp/60546.html