【问题标题】:CodeIgniter 3 : show_404() shows only template file and not controllerCodeIgniter 3:show_404() 仅显示模板文件而不显示控制器
【发布时间】:2016-03-04 05:21:08
【问题描述】:

我有一个控制器,如果 ID 不匹配,我需要检查 url 和 show_404() 中的有效 ID。

我遇到的问题是当我调用show_404() 时,它只显示view/error/404.html 而不是我在routes.php 中配置的自定义my404 控制器

区别是my404控制器添加了相同view/error/404.html的页眉和页脚

【问题讨论】:

  • 分享router.php你为它制作的代码。
  • 很简单,$route['default_controller'] = 'home'; $route['404_override'] = 'my404'; $route['translate_uri_dashes'] = FALSE;

标签: codeigniter-3


【解决方案1】:

要在调用 show_404() 时拥有自定义 404 页面,您需要扩展核心。

当你只是将它添加到路由时,它不会影响 show_404()。

在应用程序/核心文件夹中:

class MY_Exceptions extends CI_Exceptions {

    /**
     * 404 Error Handler
     *
     * @uses    CI_Exceptions::show_error()
     *
     * @param   string  $page       Page URI
     * @param   bool    $log_error  Whether to log the error
     * @return  void
     */
    public function show_404($page = '', $log_error = TRUE)
    {
        if (is_cli())
        {
            // For CLI
            $heading = 'Not Found';
            $message = 'The controller/method pair you requested was not found.';
            echo $this->show_error($heading, $message, 'error_404', 404);
        }
        else
        {
            // For view
            $CI = &get_instance();
            $CI->layout->show('front/error/404', $CI->view_data); //Note I am using layout library. You'll probably use $CI->load->view()
            echo $CI->output->get_output();
        }

        // By default we log this, but allow a dev to skip it
        if ($log_error)
        {
            log_message('error', $heading.': '.$page);
        }

        exit(4); // EXIT_UNKNOWN_FILE
    }

}

【讨论】:

  • 我确认这工作正常,但建议添加 $CI->output->set_status_header('404');在 $CI = &get_instance(); 之后
  • 此代码可以正常工作,但不适用于 CLI,因为您更改了 CLI 和 HTML 的输出。您应该执行 if -> else 类型语句并输出两种不同的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
相关资源
最近更新 更多