thinkphp 抛出异常后不返回错误页面 改成返回json字段

在ThinkPHP框架中,避免抛出异常后显示错误页面,可以通过配置`exception_tmpl`实现。只需在config中定义一个自定义的404.html或404.tpl模板,这样当异常发生时,系统将返回定义的JSON内容。

虽然不建议该tp底层代码,但我没有找到其他方法,如果有其他解答这问题的方法,麻烦留言

thinkphp5 开启debug后,当报错后会出现较详细的内容
如果关闭debug 则出现 页面错误,请稍后再试

现在要跟前端合作,然后要保证不管访问什么连接都要返回一个json自读不能返回错误页面

然后你就找而配置文件呀 好不容易看error_message 把它改成了{"status":500 , "description" : "服务器错误!"} 结果吧显示出来的呢是json格式了 结果却还是错误页面,只不过内容是这个

然后你把thinkphp5框架整个翻了一遍 你会发现框架出现错误后会加载thinkphp下面的tpl中的...tpl文件  

上面都是废话,解决方法如下:
找到项目目录下的\thinkphp\library\think\exception中的Handle.php
然后找到convertExceptionToResponse方法
你会发现 $response = new Response($content, 'html');
因为你要放回json格式的数据
改成如下内容
$content = json_encode(['status' => 500]);
$response = new Response($content, 'json');
注意要屏蔽
 //include Config::get('exception_tmpl');
然后框架错误,就会出现你刚定义的内容了

以下为新的解决方案
其实不用改底层文件 因为在 config中有个 exception_tmpl ,只要改这个文件就可以,如定义一个404.html的html页面 或者定义一个404.tpl

 'exception_tmpl'         => APP_PATH.'404.tpl',

在application中创建一个404.html的文件

html中写如下内容
{"status":500,"description":"服务器错误"}
返回的就是json字段了
### ThinkPHP 错误码 10501 的解决方案 在ThinkPHP框架中遇到错误代码10501通常意味着请求的数据验证失败。这可能是由于数据符合预期的格式或规则所引起的。为了处理这个问题,可以采取以下几个措施来解决问题并提高系统的健壮性。 #### 验证规则设置当 如果应用程序中的模型设置了严格的字段验证规则,则当提交的数据未能通过这些规则时就会触发此错误。因此,检查相关模型类里的`rule()`方法定义是否合理非常重要[^1]。 ```php protected function rule() { return [ 'title' => 'require|max:25', 'content'=> 'require' ]; } ``` #### 数据预处理足 有时前端传入的数据可能包含了必要的空白字符或其他干扰项,在这种情况下应该先对输入做适当清理再进行后续逻辑判断。可以通过自定义过滤器或者使用内置函数如trim()去除字符串两端多余空格等方式实现这一点[^2]。 #### 返回更详细的提示信息给客户端 为了让开发者更容易定位具体哪个部分出了问题以及方便最终用户的理解,可以在catch住异常之后构建更具描述性的响应体发送回去而是仅仅抛出一个通用编号。例如: ```php try { $result = ModelName::create($data); }catch (\Exception $e){ // 自定义错误消息 return json(['code'=>1,'msg'=>$e->getMessage()]); } ``` 对于特定于数据库层面的操作失误(比如SQL注入防护机制启动造成的),还需要仔细审查涉及DB交互的部分代码确保语法正确无误,并考虑升级至最新稳定版以获得更好的兼容性和安全性支持[^4]。 #### 安全配置建议 考虑到潜在的安全风险,尤其是在调试阶段暴露敏感信息的可能性,务必关闭生产环境下的DEBUG模式以免无意间泄漏重要凭证资料等隐私内容。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值