Php 扩展Codeigniter异常类以添加自定义方法

Php 扩展Codeigniter异常类以添加自定义方法,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我创建了一个新方法来处理401apache错误 我的核心类扩展了CI核心类,但当我调用方法名时,我收到以下消息: 致命错误:在 G:\Path\application\controllers\loader.php第29行 类MI_异常扩展CI_异常{ 函数_u构造() { 父项::_构造(); } /** *401未经授权 * *@access-private *@param字符串将显示该页面 *@param bool日志错误是/否 *@返回字符串 */ 函数show_401($page='',

我创建了一个新方法来处理401apache错误

我的核心类扩展了CI核心类,但当我调用方法名时,我收到以下消息:

致命错误:在
G:\Path\application\controllers\loader.php
第29行

类MI_异常扩展CI_异常{
函数_u构造()
{
父项::_构造();
}
/**
*401未经授权
*
*@access-private
*@param字符串将显示该页面
*@param bool日志错误是/否
*@返回字符串
*/
函数show_401($page='',$log_error=TRUE)
{
$heading=“401未经授权”;
$message=“未经授权。”;
//默认情况下,我们会记录这一点,但允许开发人员跳过它
如果($log\u错误)
{
日志消息('error','401 Unauthorized-->'。$page);
}
echo$this->show_error($heading,$message,'error_401',401);
出口
}
}

您已经扩展了Exceptions核心类的权限

只需确保已按如下方式设置
子类\u前缀
配置:

$config['subclass_prefix']='MI_';
但是,您似乎已经在控制器中直接使用了
show_401()
函数

关键是不能将类方法作为全局范围中的函数访问
换句话说,必须创建类的实例才能访问
show_401()
方法

但是
show_404()
内置函数是如何工作的呢? 这是因为CodeIgniter为该方法创建了,帮助用户在全局范围内使用该方法

system/core/Common.php

函数show_404($page='',$log_error=TRUE)
{
$\u error=&load\u类('Exceptions','core');
$\u错误->显示\u 404($page,$log\u错误);
出口
}
该函数使用另一个名为
load\u class()
的公共函数来获取Exceptions核心类()的实例,以便访问
show\u 404()
方法

常用函数与辅助函数相同,但是

show_401()
函数工作 为了在全局范围内使用这个函数,您可以创建一个helper函数来创建类的实例,并访问您的自定义方法

CodeIgniter中的内置帮助文件没有异常。因此,您可以在
application/helpers/
文件夹中创建
exceptions\u helper.php
文件来添加您的helper函数:

application/helpers/exceptions\u helper.php

如果(!function_存在('show_401'))
{
函数show_401($page='',$log_error=TRUE)
{
$\u error=&load\u类('Exceptions','core');
$\u错误->显示\u 401($page,$log\u错误);
出口
}
}
最后,在控制器中加载辅助文件:

$this->load->helper('exceptions');
//然后使用该函数
show_401();
您还可以通过将助手名称添加到
autoload.php
config文件中,自动加载助手文件(如果需要始终加载):

$autoload['helper']=array('exceptions'/*,'language','form'*/);

您是否尝试过使用
公共函数show\u 401(
?是的!这也不起作用。Core由CodeIgniter自动加载,对吗?或者我需要加载Core,就像加载库一样?@user3108967也发布
控制器/loader.php
(控制器)文件。@Hashem Qolami刚刚调用show\u 401();我可以扩展公共核心吗?@user3108967
Common.php
core文件不是一个类,无法扩展,因为它是在应用程序开始时加载的。最好的方法是使用我建议的自定义帮助文件:)