CodeIgniter 2.1与show_404()和404_override有关

Cas*_*r O 18 php codeigniter http-status-code-404 codeigniter-2

我一直在与CodeIgniter合作已经有一段时间了,我现在正在为一个想要自定义404页面的客户做一个项目.一切都很好,404_override而且效果很好.

我的问题出现在访问者试图访问不存在的文章时我想调用该show_404()函数,但这显示了"out of box"404页面,而不是404_override中写的那个.

我已经看到了旧版本的一些修复,但我无法在2.1中使用它.所以如果有人可以帮助我,我将非常感激.

lan*_*ons 23

重定向是最干净的; 加载视图也可以工作.

这里的问题是show_404()通常在您的控制器已经加载之后被调用(事情必须告诉它显示404).CI不喜欢在那时加载第二个控制器,这是主要障碍.

您最好的选择可能是扩展Exceptions类中的show_404()函数以重定向到404路由.如果没有重定向,您将会在调用404之前显示一个您知道具有所需"额外数据"的视图或其他内容(或者我猜您也可以在Exceptions类中加载它).在某些动态视图中,它可能变得非常复杂.

你显然想要比在错误文件夹中编辑404模板更先进的东西.我在尝试从该文件访问get_instance()时遇到问题,因为有时它会在构造控制器之前加载.所以,如果你尝试那就要小心;)

更新:这是扩展show_404()函数以加载视图的工作示例

<?php
// application/core/MY_Exceptions.php
class MY_Exceptions extends CI_Exceptions {

    public function show_404()
    {
        $CI =& get_instance();
        $CI->load->view('my_notfound_view');
        echo $CI->output->get_output();
        exit;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我正在CI论坛上阅读的东西...不应该包括`$ CI-> output-> set_status_header('404');`用于干净的SEO目的? (9认同)