ThinkPHP6项目基操(4.拦截无效请求 控制器或方法不存在)
日期: 2020-11-29 分类: 跨站数据测试 441次阅读
一、默认无效请求
当访问不存在的控制器或方法时,默认会显示如下页面:
二、显示具体错误信息
方法1.配置config/app.php
如果想看具体的错误信息可以配置config/app.php
'show_error_msg' => true
配置后显示具体错误信息:
方法2. 配置.env
环境变量
将方法1的配置还原;然后看下项目根目录有个文件.example.env
,这是官方提供的env
示例文件,可以将它复制一份,然后重命名为.env
文件,默认文件内容如下:
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
可以看到第一行APP_DEBUG = true
默认开启了debug模式,这时候再访问刚才的地址,可以看到非常详细的报错,
注意:这种模式是开发阶段才能打开的,线上模式是不能打开的,因为会暴露详细的文件和信息流程,非常不安全。
线上模式,我们设置APP_DEBUG = false
,这时候又会回到刚才的错误页面:
三、处理错误
1. 方法不存在
在BaseController
控制器中定义__call
方法,如果访问的控制器继承了BaseController
控制器,而方法找不到会进入这个__call
方法,需要注意的是访问的方法可能是API格式的json数据,也可能是返回页面,如果是api数据:
public function __call($name, $arguments)
{
// 如果是API模块,需要输出API的数据格式(一般是json)
// 如果是模板引擎的方式,需要输出自定义错误页面
$result = [
'status' => 0,
'message' => '找不到该方法',
'result' => null
];
return json($result, 400);
}
当我们访问不存在的方法时:
下图显示格式化的json数据格式,是因为浏览器安装了JSONView插件
2. 控制器不存在
当访问一个不存在的控制器时,也是显示如下报错:
解决方法,在app\controller
目录下新建一个Error
控制器(名字固定为Error)
:
<?php
namespace app\controller;
class Error
{
public function __call($name, $arguments)
{
$result = [
'status' => 0,
'message' => '找不到该控制器',
'result' => null
];
return json($result, 400);
}
}
这时再访问不存在的控制器:
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐