更改Codeigniter 3.0版本上的视图默认路径

时间:2015-10-26 07:26:11

标签: codeigniter codeigniter-3

在加载视图时,在codeigniter 3上,默认路径为application / views /

我希望能够将默认路径更改为application / views / template /

我用来更改MY_Loader.php eval上的默认视图路径,如下所示。 Currenly它只适用于CI2似乎不适用于CI3

问题在codeigniter 3.0版本上,更改默认视图路径的最佳方法是什么,可以类似于我从CI2到CI3的MY_Loader。

$this->_ci_view_path = APPPATH .'views/template/';

4 个答案:

答案 0 :(得分:4)

解决

问题出在这里

CI2版本

$this->_ci_view_path = APPPATH .'views/somefoldername/';

现在CI3版本

$this->_ci_view_paths = array(
    APPPATH . 'views/somefoldername/' => TRUE
);

如何更改Codeigniter 3中的默认视图路径

  

应用程序>核心> MY_Loader.php

<?php

class MY_Loader extends CI_Loader {

    public function __construct() {

        $this->_ci_ob_level  = ob_get_level();

        $this->_ci_view_paths = array(
            APPPATH . 'views/somefoldername/' => TRUE
        );

        $this->_ci_library_paths = array(APPPATH, BASEPATH);

        $this->_ci_model_paths = array(APPPATH);

        $this->_ci_helper_paths = array(APPPATH, BASEPATH);

        log_message('debug', "Loader Class Initialized");

    }
}

HMVC&amp; amp;更新Codeigniter 3

以下代码中的glob中的此符号*表示模块名称。

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

/* load the MX_Loader class */
require APPPATH."third_party/MX/Loader.php";

class MY_Loader extends MX_Loader {

    public function __construct() {

        $this->_ci_ob_level  = ob_get_level();

        // Default
        $this->_ci_view_paths = array(
            APPPATH . 'views/' => TRUE
        );

        // Modules
        $module_view_paths = glob(APPPATH . 'modules/*/views/template/', GLOB_ONLYDIR);

        foreach ($module_view_paths as $module_view_path) {
            $this->_ci_view_paths = array(
                $module_view_path => TRUE,
            );
        }

        $this->_ci_library_paths = array(APPPATH, BASEPATH);

        $this->_ci_model_paths = array(APPPATH);

        $this->_ci_helper_paths = array(APPPATH, BASEPATH);

        log_message('debug', "Loader Class Initialized");

    }
}

这允许您为HMVC加载视图

执行此操作
$this->load->view('folder_name/view_name');

而不是

$this->load->view('template/folder_name/view_name');

答案 1 :(得分:2)

如果再次检查index.php文件,您会看到每条线路都得到了很好的解释。对于主题中的这一特定行写道:

  

如果您确实移动了这个,请使用此文件夹的完整服务器路径。

答案 2 :(得分:1)

实际上这不是你问题的答案,但它将作为替代解决方案。

覆盖view()方法或通过将CI_Loader扩展到达到预期结果来创建新功能

public function my_view($file,$data)
{
    $this->view("template/$file",$data);
}

答案 3 :(得分:1)

将此更改为

$this->_ci_view_path = APPPATH .'views/template/'; # Works on CI 3.0-

$this->_ci_view_paths = array(APPPATH.'views/template/' => TRUE); # Works on CI 3.0+

Posting My Comment as answer