本教程的目的是更改ThinkPHP5.0的默认错误页面,一般情况下错误页面应该和网站风格一致,所以这里我自定义错误类,在错误类里转交给控制器输出错误页面。

注意:本教程效果在配置文件app_debug设置为false的情况下才有效。

1、编写异常监听类文件http.php,这里我放置的位置为application/index/common/http.php

namespace app\index\common;
use think\exception\Handle;
use think\exception\HttpException;
/**
 * Class http
 * @package app\index\common
 */
class http extends Handle
{
    public function render(\Exception $e)
    {
        if ($e instanceof HttpException) {
            $statusCode = $e->getStatusCode();
        }
        return redirect('Error/Index');
    }
}

上面代码的意思为出现错误,就转到Error/Index方法,这个我没有详细判断错误代码,全部转到同一个页面,如果你需要404和500等转到不同的页面显示,只需判断$statusCode的值就行了。

2、写异常页面Error/Index

namespace app\index\controller;
/**
 * Class Error
 * @package app\index\controller
 */
class Error extends Controller
{
    public function Index(){
        return '天啊,出错了!';
    }
}

上面代码我只是简单的输出的一句话,实际项目你可以任意发挥设计错误页面。

3、配置Config.php,使用我们的自定义异常类

// 异常处理handle类 留空使用 \think\exception\Handle
'exception_handle'       => '\\app\\index\\common\\http',

只需配置exception_handle参数,值为我们刚刚定义的异常类的命名空间地址。

现在你就可以访问自己的项目,有错误抛出,如果显示 “天啊,出错了!”,那就证明配置成功了,接下来就自己发挥,打造自己的错误页面。