我正在使用 CodeIgniter 的模板库,http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html http://williamsconcepts.com/ci/codeigniter/libraries/template/reference.html,现在我也想实现自定义错误页面。我发现了一种涉及 MY_Router 扩展默认路由器的方法:http://maestric.com/doc/php/codeigniter_404 http://maestric.com/doc/php/codeigniter_404但这只处理 404 错误。我希望所有错误都显示一个简单的用户友好页面,包括数据库错误等,并且我希望它通过控制器,部分原因是我可以使用模板库,部分原因是我还可以实现电子邮件功能来向自己发送邮件有关发生的错误的信息。
有人询问如何扩展上述 MY_Router 方法的功能以解决其他错误,例如 error_db,但没有得到作者的答复,所以我转过来看看是否有人知道如何按照上述方法或实现它的任何其他简单方法。请注意,我是新手,所以不要过多地假设我对基本 CodeIgniter 功能的了解:-)
我已经为 Exceptions 类创建了一个扩展。
在此扩展中,我替换了$this->Exceptions->show_error();
方法,该方法由show_error()
CI 的功能。
当我打电话时show_error('User is not logged in', 401);
这个自定义方法正在寻找错误_$status_code
先归档。在上面的示例中,它将查找 error_401.php 文件。
当这个文件不存在时,它只会加载错误的general.php文件,就像默认的一样$this->Exceptions->show_error();
does.
对于您的情况,您可以使用以下代码在您的库、控制器或任何可能引发错误的内容中使用。
<?php
if(!(isset($UserIsLoggedin))){
$this->load->view('template/header');
show_error('User is not logged in', 401);
$this->load->view('template/footer');
}
?>
您的 error_401.php 文件应该如下所示:
<div id="container">
<h1><?php echo 'This is an 401 error'; ?></h1>
<?php echo $message; ?>
</div>
/application/core/MY_Exceptions.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Exceptions extends CI_Exceptions
{
function show_error($heading, $message, $template = 'error_general', $status_code = 500)
{
if((!isset($template)) || ($template == 'error_general')){
if(file_exists(APPPATH.'errors/error_'.$status_code.'.php')) {
$template = 'error_'.$status_code;
}
}
if (!isset($status_code)) $status_code = 500;
set_status_header($status_code);
$message = '<p>'.implode('</p><p>', ( ! is_array($message)) ? array($message) : $message).'</p>';
if (ob_get_level() > $this->ob_level + 1)
{
ob_end_flush();
}
ob_start();
include(APPPATH.'errors/'.$template.'.php');
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)