由于我对命令show_404()
非常满意,您可以在任何地方调用该命令来显示404错误页面,因此我确实想为没有权限的请求实现show_403()
。
我创建了文件application/core/MY_Exceptions.php
,并添加了以下代码:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Exceptions extends CI_Exceptions {
public function __construct()
{
parent::__construct();
}
public function show_403($page = '', $log_error = TRUE)
{
//do some stuff
echo "test";
}
}
然后我会在控制器application/controllers/Welcome.php
中这样称呼它:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
// show_404(); // <-- this works!
show_403(); // <-- this works not!
}
}
当我访问控制器索引方法时,我在浏览器中不断收到以下错误:
Fatal error: Call to undefined function show_403()
正如你可能已经注意到的,我甚至在CodeIgniter的普通安装上测试了这个错误,所以你应该能够用这两个文件来重现这个错误。
我知道我可以手动加载扩展,但这并不像我想在任何地方使用show_403()
那样优雅。。。
路由设置正确,CodeIgniter版本为3.0.3,PHP版本为5.6.2,出于调试目的,application/core/MY_Exceptions.php
的文件系统权限甚至设置为777。
您的异常类没有加载,因此会出现错误。
像这个一样加载你的课程
$excep = load_class('Exceptions', 'core', $this->config->item('subclass_prefix'));
echo $excep->show_403();// will echo test
另一个建议是使用helpers
,
在application/helpers
中添加文件名为error_helper
的代码
public function show_403($page = '', $log_error = TRUE)
{
//do some stuff
echo "test";
}
调用您的函数
$this->load->helper('error_helper');
echo show_403();