ThinkPHP 解决模板文件大小写问题
使用TP3.2,CentOS报找不到模板文件错误。大概的情况如下:
windows下define(‘APP_DEBUG’, true) ‘URL_CASE_INSENSITIVE’ =>true。没问题。
windows下define(‘APP_DEBUG’, true) ‘URL_CASE_INSENSITIVE’ =>false。没问题。
windows下define(‘APP_DEBUG’, false) ‘URL_CASE_INSENSITIVE’ =>true。没问题。
windows下define(‘APP_DEBUG’, false) ‘URL_CASE_INSENSITIVE’ =>false。没问题。
linux下define(‘APP_DEBUG’, true) ‘URL_CASE_INSENSITIVE’ =>true。报错找不到模板文件。
linux下define(‘APP_DEBUG’, true) ‘URL_CASE_INSENSITIVE’ =>false。报错找不到模板文件。
linux下define(‘APP_DEBUG’, false) ‘URL_CASE_INSENSITIVE’ =>true。报错找不到模板文件。
linux下define(‘APP_DEBUG’, false) ‘URL_CASE_INSENSITIVE’ =>false。报错找不到模板文件。
解决方案如下
修改 View.class.php 文件让大小写共存
替换 parseTemplate
代码如下:
/**
* 自动定位模板文件
* @access protected
* @param string $template 模板文件规则
* @return string
*/
public function parseTemplate($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') or define('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;
}
private function Get_Url($f,$x=''){
$a = explode('/',$f);
$b = count($a)-1;
foreach ($a as $k => $v){
if($k == $b){
if(empty($x)){
$c .= ucfirst($v).'/';
}else{
$c .= strtolower($v).'/';
}
}else{
$c .= $v.'/';
}
}
return rtrim($c,'/');
}
/**代码结束**/