CI框架中自定义view文件夹位置
Posted superfat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI框架中自定义view文件夹位置相关的知识,希望对你有一定的参考价值。
要想自定义view文件夹的位置,首先要了解CI框架时如何加载view文件夹的。
CI中默认调用view的方法是:
$this->load->view(); //这一行代码的原理是什么呢?请往下看:
我们打开application/core/Loader.php,里面有一个这样的方法:
public function add_package_path($path, $view_cascade = TRUE) { $path = rtrim($path, ‘/‘).‘/‘; array_unshift($this->_ci_library_paths, $path); array_unshift($this->_ci_model_paths, $path); array_unshift($this->_ci_helper_paths, $path);
//这一行即为加载view目录的方法,修改它即可 $this->_ci_view_paths = array($path.‘views/‘ => $view_cascade) + $this->_ci_view_paths; // Add config file path $config =& $this->_ci_get_component(‘config‘); $config->_config_paths[] = $path; return $this; }
但本着可扩展性的原则,我们不去修改源代码,而是使用继承的原则来解决这个问题:
方法:我们自定义一个MY_Loader.php的类,继承自Loader.php,然后在MY_Loader.php中修改$this->_ci_view_paths;
这里用一个小例子来说明:
我现在有一个网站,分为前台和后台,前台使用新的自定义view目录,定义在网站根目录下,命名为:D:/www/citest/view;
后台的view目录就使用默认的view目录,位置:/application/view 。
我们先在/application/core目录下新建一个MY_Loader.php文件:
<?php defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘);
class MY_Loader extends CI_Loader{ //开启新的视图目录 public function switch_view_on() { $this->_ci_view_paths = array(FCPATH . ‘view/‘ =>true); //print_r($this->_ci_view_paths); } //关闭新的视图目录 public function switch_view_off() { #just do nothing } }
然后在/application/core 目录下新建一个MY_Controller.php的 文件,然后写入两个类:
<?php defined(‘BASEPATH‘) OR exit(‘No direct script access allowed‘); //定义前台总控制器 class Home_Controller extends CI_Controller { public function __construct() { parent::__construct(); #所有前台控制器都默认使用新的自定义视图目录 $this->load->switch_view_on(); } } //定义后台总控制器 class Admin_Controller extends CI_Controller { public function __construct() { parent::__construct(); #所有后台控制器都使用默认的视图目录 $this->load->switch_view_off(); } }
疑点:为什么上述代码可以在Controller里面调用Loader类的方法呢?
答:因为CI中的CI_Controller控制器有一个特殊的名字,叫做超级控制器,这个超级控制器里面集中了很多类库,其中就包括Loader类,所以可以在控制器中直接调用Loader类的方法。关于这个超级控制器,这里不再赘述,只是做一个抛砖引玉,有兴趣的童鞋,可以自己研究研究。
---------到这里修改完成--------。
这样我们再写代码的时候,前台控制器就继承Home_Controller,当你使用$this->load->view()方法的时候,CI就会自动去加载你自定义的view目录下的视图文件。
后台控制器就继承Admin_Contoller,当你使用$this->load->view()方法的时候,CI就会加载默认的view目录下的视图文件。
并且前后台都有自己的父类控制器,以后可以在父类控制器里做一些权限控制的设置,也非常方便。
以上是关于CI框架中自定义view文件夹位置的主要内容,如果未能解决你的问题,请参考以下文章
005.CI4框架CodeIgniter, 通过带路径的view视图访问