如何在CodeIgniter 4中当文件不存在时抛出show_404错误
在CodeIgniter 4中检测视图存在并抛出404错误的正确方式
你在CodeIgniter 3里的写法在CI4里失效,主要是因为框架的视图处理逻辑和404触发机制有变化,以下是正确的实现方式:
问题根源
- CI4的视图目录默认是
app/Views(注意大小写敏感),手动拼接路径容易出现大小写或路径结构错误。 - CI4提供了官方的视图检测方法,比自行判断文件存在更可靠,还能支持模块视图的检测。
- 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
相关产品推荐
相关产品推荐

