美文网首页
ThinkPHP 解决模板文件大小写问题

ThinkPHP 解决模板文件大小写问题

作者: 陈德良EGG | 来源:发表于2019-06-29 13:39 被阅读0次

    使用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,'/');

        }

    /**代码结束**/

    相关文章

      网友评论

          本文标题:ThinkPHP 解决模板文件大小写问题

          本文链接:https://www.haomeiwen.com/subject/vycpcctx.html