【发布时间】:2016-06-05 20:27:04
【问题描述】:
我正在尝试根据加载的第三方路径检查视图文件是否真的存在
通常,我会使用is_file(APPPATH.'/views/folder/'.$view) 检查视图是否存在
我可以使用get_package_paths 检索每个加载的第三方路径(感谢 Tpojka 的评论),然后检查他们的文件夹视图(如果文件存在),
但我希望进行“直接”检查,好像 ->view 函数会返回 false 而不是重定向到错误页面
$html = $this->load->view($tpl,'',TRUE) ? $this->load->view($tpl,'',TRUE) : $another_template;
虽然我意识到可能没有其他解决方案可以通过加载的路径循环添加此手动检查并将其隐藏在 CI_Load 类扩展 (application/core/MY_Loader) 中以在控制器中提供直接检查的外观:
编辑:这是个坏主意,因为 view() 可能会将 false 返回到可能不是为之设计的 CI 函数
class MY_Loader extends CI_Lodaer{
public function __construct() {
parent::__construct();
}
public function view($view, $vars = array(), $return = FALSE)
{
foreach( $this->get_package_paths( TRUE ) as $path )
{
// this will only retrieve html from the first file found
if( is_file( $path."/views/".$view ) ) return parent::view($view, $vars, $return);
}
// if no match
return false;
}
}
我觉得烦人的是 load->view 已经对路径进行了检查,所以这个解决方案将添加第二次检查并增加服务器消耗..
【问题讨论】:
-
可以get_package_paths帮忙吗?
-
这是一个好的开始,对,谢谢你的提示!我仍然必须手动检查 third_party 视图文件夹中的文件,但它确实可以很容易地交叉结果。
-
其实我想我到底会怎么做;虽然我希望有一种可能的直接检查(也许通过扩展 load->view ...)
-
我很高兴我能指出一些有用的东西,虽然我不明白为什么你不能使用
is_file($file)。如果包文件存在,你想加载包文件,如果包文件不存在,你想加载主视图文件?
标签: php codeigniter codeigniter-3