我创建了一个处理401 apache错误的新方法。
我的核心类扩展了CI核心类,但是当我调用方法名时,我会收到以下消息:
致命错误:在左侧调用未定义的函数
show_401()
第29行G:\Path\application\controllers\loader.php
class MI_Exceptions extends CI_Exceptions {
function __construct()
{
parent::__construct();
}
/**
* 401 Unauthorized
*
* @access private
* @param string the page
* @param bool log error yes/no
* @return string
*/
function show_401($page = '', $log_error = TRUE)
{
$heading = "401 Unauthorized";
$message = "Unauthorized.";
// By default we log this, but allow a dev to skip it
if ($log_error)
{
log_message('error', '401 Unauthorized --> '.$page);
}
echo $this->show_error($heading, $message, 'error_401', 401);
exit;
}
}
答案 0 :(得分:5)
您已将Exceptions核心类扩展为正确。
请确保您已将subclass_prefix
配置设置如下:
$config['subclass_prefix'] = 'MI_';
但是,您似乎直接在Controller中使用了show_401()
功能。
关键是你不能作为全局范围中的函数访问类方法。
换句话说,您必须创建该类的实例才能访问show_401()
方法。
show_404()
内置函数如何工作?这是因为CodeIgniter为该方法创建了 a Common function ,这有助于用户在全局范围内使用Exception::show_404()
方法。
<强>系统/核心/的common.php 强>
function show_404($page = '', $log_error = TRUE)
{
$_error =& load_class('Exceptions', 'core');
$_error->show_404($page, $log_error);
exit;
}
该函数使用另一个名为load_class()
的常用函数来获取Exceptions核心类(returning by reference)的实例,以便访问show_404()
方法。
常用函数与辅助函数相同,但they're loaded at very beginning of the application。
show_401()
功能正常工作为了在全局范围内使用此函数,您可以创建一个辅助函数来创建类的实例,并访问您的自定义方法。
CodeIgniter中没有 Exceptions 内置帮助文件。因此,您可以在exceptions_helper.php
文件夹中创建application/helpers/
文件以添加辅助函数:
<强>应用/助手/ exceptions_helper.php 强>
if ( ! function_exists('show_401'))
{
function show_401($page = '', $log_error = TRUE)
{
$_error =& load_class('Exceptions', 'core');
$_error->show_401($page, $log_error);
exit;
}
}
最后,在Controller中加载帮助文件:
$this->load->helper('exceptions');
// Then use the function
show_401();
您还可以通过将帮助程序名称添加到autoload.php
配置文件中来自动加载帮助程序文件(如果必须始终加载):
$autoload['helper'] = array('exceptions'/*, 'language', 'form'*/);