You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter 4中当文件不存在时抛出show_404错误

在CodeIgniter 4中检测视图存在并抛出404错误的正确方式

你在CodeIgniter 3里的写法在CI4里失效,主要是因为框架的视图处理逻辑和404触发机制有变化,以下是正确的实现方式:

问题根源

  1. CI4的视图目录默认是app/Views(注意大小写敏感),手动拼接路径容易出现大小写或路径结构错误。
  2. CI4提供了官方的视图检测方法,比自行判断文件存在更可靠,还能支持模块视图的检测。
  3. CI4的404错误触发更推荐使用异常机制,而非直接沿用旧的show_404()写法(虽然show_404()仍可用,但异常方式更符合框架规范)。

修正后的代码示例

public function family($type)
{
    $page = 'family';
    // 定义要检测的视图路径(无需加.php后缀和基础目录)
    $targetView = 'pages/family/' . $page;

    // 使用CI4内置的view_exists()检测视图是否存在
    if (!view_exists($targetView)) {
        // 方式1:抛出PageNotFoundException异常(CI4推荐)
        throw new \CodeIgniter\Exceptions\PageNotFoundException();
        
        // 方式2:调用show_404()函数,效果一致
        // show_404($targetView);
    }

    $data = [
        'title'   => 'Families',
        'content' => 'family/' . $page
    ];

    return view('index', $data);
}

关键说明

  • view_exists():会自动按照CI4的视图配置查找文件,覆盖默认视图目录、模块视图目录,无需手动拼接完整路径,避免路径错误。
  • PageNotFoundException:抛出该异常后,框架会自动触发404错误页面,符合CI4的异常处理流程,比直接调用函数更规范。
  • 路径写法:检测时只需传入视图的相对路径(相对于app/Views),不需要加.php后缀,框架会自动处理。

内容的提问来源于stack exchange,提问作者mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:08:12