在thinkphp5中如何抛出异常状态码(比如401,403,404等),因为这些能极大的给用户以良好的体验。
因为在上线阶段,任何的系统错误信息都不能让浏览用户给看到,比如404(Not Found)页面我们应该直接抛出一个404异常,最好是配合一个404页面来展示出来,给用户以最好的体验,这是非常重要的。
要做到这一点,首先要在你的配置文件将调试模式关闭(在开发阶段要打开):
|
1
|
'app_debug' => false,
|
然后在配置文件中配置404等页面的模板路径(APP_PATH指的是application路径):
|
1
|
'http_exception_template' => [ 404 => APP_PATH.'404.html', 403 => APP_PATH.'404.html',]
|
404页面部分代码如下:
|
1
2
3
4
5
6
7
|
<div class="bg">
<div class="cont">
<div class="c1"><img src="/public/static/404/01.png" class="img1" /></div>
<h2><?php echo $e->getMessage()?><!--输出抛出异常信息--></h2>
<div class="c2"><a href="#" class="re">返回论坛</a><a href="#" class="home">网站首页</a><a href="#" class="sr">搜索一下页面相关信息</a></div>
<div class="c3">您可能输入了错误的网址,或者该网页已删除或移动,千锋PHP</div>
</div></div>
|
下面来进行测试:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
if (Request::instance()->isAjax()) {
$data = input();
$info = [];
$where = '';
switch ($data['msg']) {
case '验证码':
$info = [
'y' => '输入正确',
'n' => '输入错误',
];
$where = session::get('admin_login_session') == md5($data['param']);break;
}
if ($where) {
echo '{"info":"' . $data['msg'] . $info ['y'] . '","status":"y"}';//注意ValidForm返回格式(json)
} else {
echo '{"info":"' . $data['msg'] . $info ['n'] . '","status":"n"}';//注意ValidForm返回格式(json)
}
}else{
throw new \think\exception\HttpException(403, '~~~千锋PHP通知您非法请求~~~'); //因为此处只能是ajax来访问,当直接在浏览器中访问该方法时,
可以抛出一个403,其他类似),此处有简写方法abort代替
}
|