我需要从以下范围之外加载视图:
$this->load->view();
它似乎适用于base / application / views目录.如何从/ application /目录外部访问视图?
我假设我将不得不扩展CI_Loader类这将是最好的前进方式吗?
我还找到了包含view_paths的数组:
// base/system/core/Loader.php
// CI_Loader
/**
* List of paths to load views from
*
* @var array
* @access protected
*/
protected $_ci_view_paths = array();
但是所有声明的变量上面的注释让我陷入困境
// All these are set automatically. Don't mess with them.
关于从哪里去的任何想法将不胜感激:-)
解决方法:
不知道这是否是正确的方法,但它的工作原理:)
在您的应用程序/核心文件夹中放置此加载器扩展
class MY_Loader extends CI_Loader {
function ext_view($folder, $view, $vars = array(), $return = FALSE) {
$this->_ci_view_paths = array_merge($this->_ci_view_paths, array(APPPATH . $folder . '/' => TRUE));
return $this->_ci_load(array(
'_ci_view' => $view,
'_ci_vars' => $this->_ci_object_to_array($vars),
'_ci_return' => $return
));
}
}
?>
然后你想要一个外部视图文件,假设它在third_party文件夹中
应用/ THIRD_PARTY / my_new_view.php
Hello : <?php echo $my_name; ?>
然后在控制器中调用新视图
ext_view是你的新视图加载器方法,
> 1st param:你应用的文件夹
>第2个参数:视图名称
>第3个参数:变量数据等等……
test_controller.php
$view_data = array('my_name' => 'dino');
$this->load->ext_view('third_party', 'my_new_view', $view_data);
如果一切都很好.它会输出
你好:迪诺
标签:autoload,php,codeigniter
来源: https://codeday.me/bug/20190927/1822832.html