Php 如何检查codeigniter中是否存在视图文件?

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_

我正在使用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_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