Codeigniter使用show_error方法加载您自己的错误模板文件

时间:2015-04-15 16:44:04

标签: php codeigniter

以下是来自show_error

的Codeigniter的/system/core/exceptions.php方法
public function show_error($heading, $message, $template = 'error_general', $status_code = 500)
    {
        $templates_path = config_item('error_views_path');
        if (empty($templates_path))
        {
            $templates_path = VIEWPATH.'errors'.DIRECTORY_SEPARATOR;
        }

        if (is_cli())
        {
            $message = "\t".(is_array($message) ? implode("\n\t", $message) : $message);
            $template = 'cli'.DIRECTORY_SEPARATOR.$template;
        }
        else
        {
            set_status_header($status_code);
            $message = '<p>'.(is_array($message) ? implode('</p><p>', $message) : $message).'</p>';
            $template = 'html'.DIRECTORY_SEPARATOR.$template;
        }

        if (ob_get_level() > $this->ob_level + 1)
        {
            ob_end_flush();
        }
        ob_start();
        include($templates_path.$template.'.php');
        $buffer = ob_get_contents();
        ob_end_clean();
        return $buffer;
    }

现在我正试图从我的控制器调用此函数,现在如果我这样做,那么我可以传递$heading$message$template和{{1} }。

现在我正在尝试创建自己的401 HTTP Unauthorized错误页面,所以我在我的控制器中创建了一个$status_code内的视图文件,我正在尝试这样做:

/application/views/errors/html/error_401.php

所以我传递了我的标题和消息,这是我创建的show_error('401 Unauthorised', 'You are not authorised to access this page.', 'error_401', 401); 视图文件本身。我还告诉函数我要加载的模板是error_401.php

但是,它仍然会在加载error_401而不是error_general时继续存在。有这个原因吗?

由于

1 个答案:

答案 0 :(得分:0)

一种可能的方法是简单地为您的库重新创建方法。

public function show_error($heading, $message, $template = 'error_general', $code = 404)
  {
    $template_path = APPPATH.'views/library_name/errors';
    if ($this->config->item('error_view_path', 'library_name'))
    {
      $template_path = $this->config->item('error_view_path', 'library_name');
    }
    if (is_cli())
        {
            $message = "\t".(is_array($message) ? implode("\n\t", $message) : $message);
            $template = 'cli'.DIRECTORY_SEPARATOR.$template;
        }
        else
        {
            set_status_header($code);
            $message = '<p>'.(is_array($message) ? implode('</p><p>', $message) : $message).'</p>';
            $template = DIRECTORY_SEPARATOR.$template;
        }

        ob_start();
        include($template_path.$template.'.php');
        $buffer = ob_get_contents();
        ob_end_clean();
        echo $buffer;
    exit();
  }

基本上取自/system/core/Exceptions.php,但很容易做到。

@Patrick提到的http://jeromejaglale.com/doc/php/codeigniter_404