Php 如何检查codeigniter中是否存在视图文件?
我正在使用codeigniter v3 在控制器文件中,我想检查视图文件是否存在Php 如何检查codeigniter中是否存在视图文件?,php,codeigniter,Php,Codeigniter,我正在使用codeigniter v3 在控制器文件中,我想检查视图文件是否存在 $file = "login"; $this->load->view($file, array(),true); 给我错误的代码 An Error Was Encountered Unable to load the requested file: login.php 原生PHP的答案是: file\u exists()()允许您检查文件系统中是否存在文件 简单地说,您需要: if (file_
$file = "login";
$this->load->view($file, array(),true);
给我错误的代码
An Error Was Encountered
Unable to load the requested file: login.php
原生PHP的答案是:
file\u exists()
()允许您检查文件系统中是否存在文件
简单地说,您需要:
if (file_exists(base_url('views/file.php')))
{
// do something if view file exists
}
else
{
// do some other thing if file is not present
}
有可能覆盖负责加载视图的函数 在
应用程序/core
文件夹中创建一个类MY_Loader
class MY_Loader extends CI_Loader
{
public function view($view, $vars = array(), $return = FALSE)
{
foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val)
{
$$_ci_val = isset($_ci_data[$_ci_val]) ? $_ci_data[$_ci_val] : FALSE;
}
$file_exists = FALSE;
// Set the path to the requested file
if (is_string($_ci_path) && $_ci_path !== '')
{
$_ci_x = explode('/', $_ci_path);
$_ci_file = end($_ci_x);
}
else
{
$_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);
$_ci_file = ($_ci_ext === '') ? $_ci_view.'.php' : $_ci_view;
foreach ($this->_ci_view_paths as $_ci_view_file => $cascade)
{
if (file_exists($_ci_view_file.$_ci_file))
{
$_ci_path = $_ci_view_file.$_ci_file;
$file_exists = TRUE;
break;
}
if ( ! $cascade)
{
break;
}
}
}
if ( ! $file_exists && ! file_exists($_ci_path))
{
throw new Exception('View file '.$view.' doesn\'t exist.');
}
return $this->_ci_load(array('_ci_view' => $view, '_ci_vars' => $this->_ci_prepare_view_vars($vars), '_ci_return' => $return));
}
}
它现在抛出一个异常——你唯一要做的就是捕捉它
try
{
$file = "login";
$this->load->view($file, array(),true);
}
catch(\Throwable $e)
{
echo $e->getMessage();
}
如果使用PHP<7,则需要捕获异常,而不是Throwable接口
您可以使用
file\u exists($file)代码>
但是在没有硬编码的情况下有绝对路径。
您可以使用dirname(\uuuuu文件)
试一试
难道代码的一部分不应该期望代码的其他部分出现吗?@JonathonReinhart大多数时候我都同意你的看法。但是,在某些用例中,您可能需要检查是否存在特定于用例的(自定义)视图,并显示该视图,或者显示通用视图。我有一个特定的用例,非常类似于我为客户开发的站点上的用例。由于我支持NDA,所以无法详细说明,但实际上我需要在某一点上做这件事错误是在/application/view/文件夹中找不到名为view.php的文件。检查“视图”文件是否存在只是开发过程中的一个问题。作为开发人员,您需要提供有效的值。如果用户输入了不存在的资源,即不存在的页面,请查看。不管怎样,CodeIgniter将显示一个404页面未找到视图。实际上,我正在专门寻找CodeIgniter framworkcodeigniter,它没有一个特定的方法来实现这一点。记住framworks不是一个完整的语言实现/重写,只是一套让您的生活更轻松的工具。为什么本地PHP函数不适合您?我的最后一个问题基本上是因为CI没有扩展PHP功能。它只是把它包起来。如果有(没有)一个CI方法,那么在后台它将使用相同的本地PHP调用。尽管如此,CI File Helper确实包含一些文件函数,这些函数虽然不是真正用于检查文件是否存在,但可以用于此目的。阅读CI文档是的,你是对的。我只是想知道Codeigniter是否有专门的功能。没有具体的功能,但是文件助手提供了get\u file\u info()
和read\u file()
,这两个功能都有其他用途,但如果文件不存在,它们将返回false
,它们可以用来检查文件是否存在(它们的开销确实比只使用file\u exists()
要大)
$link = dirname(__FILE__) . '/include.php';
if (realpath($link)) {
include($link);
}
if(! file_exists(APPPATH."views"."/$foldername/$filename.php") )
redirect(base_url()); //or anything you want