5

CodeIgniter 有 /system/application/errors/error_404.php ,当出现 404 时会显示它,因为实际上是“找不到控制器”条件。但是,对于我的项目,我真的需要处理这个错误,就像控制器类中缺少方法一样。在这种情况下,我会显示一个带有漂亮“找不到页面:也许您的意思是这个?...”页面的普通视图,其中包含数据库生成的导航等。

我的想法是我可以做以下两件事之一:

  1. 创建header("Location: /path/to/error_page")调用以重定向到现有(或特殊)控制器的 404 处理程序
  2. 添加某种默认路由器来处理它。

达到所需结果的最佳方法是什么?有什么需要注意的陷阱吗?

4

1 回答 1

2

我将 CodeIgniter 与 Smarty 一起使用。我的 Smarty 类中有一个名为 notfound() 的附加函数。调用 notfound() 将正确的标题位置设置为 404 页面,然后显示 404 模板。该模板具有可覆盖的标题和消息,因此用途广泛。这是一些示例代码:

Smarty.class.php

function not_found() {
header('HTTP/1.1 404 Not Found');

if (!$this->get_template_vars('page_title')) {
    $this->assign('page_title', 'Page not found');
    }

    $this->display('not-found.tpl');
    exit;
}

在控制器中,我可以执行以下操作:

$this->load->model('article_model');
$article = $this->article_model->get_latest();

if ($article) {
    $this->smarty->assign('article', $article);
    $this->smarty->view('article');
} else {
    $this->smarty->assign('title', Article not found');
    $this->smarty->not_found();
}

同样,我可以将 /system/application/error/error_404.php 中的代码更改为:

$CI =& get_instance();
$CI->cismarty->not_found();

它工作得很好,使用少量代码,并且不会为不同类型的缺失实体重复 404 功能。

我认为您可以使用内置的 CodeIgniter 视图做类似的事情。重要的是在你做你的视图之前吐出标题。

更新:我使用与此处描述的类似的自定义 Smarty 包装器:

使用 Smarty 和 CodeIgniter

于 2009-05-12T13:30:13.427 回答