如何用 TP5、thinkPHP5.1 框架 接口开发 异常时返回json,validata 路由验证 失败后返回json(框架默认的是 debug返回异常页面 非debug返回空页面)
程序员文章站
2024-01-03 11:12:16
...
如何用 TP5、thinkPHP5.1 框架 接口开发 异常时返回json
validata 路由验证 失败后返回json(框架默认的是 debug返回异常页面 非debug返回空页面)
本章解决的问题:
这是不是曾让你用TP框架开发接口的时候很是抓狂,想用validata(路由验证)的带来的便利,却因为validata 验证未通过时是异常返回。只能望眼欲穿,亦或者 只能妥协的去 巴拉巴拉巴拉 的自己写个方法。或是 用其他麻烦点的其他方法。亦或是 想写却不知如何下手了。
这些在本章都能解决啦~~
只需如下几行小代码
在 tp5/config/app.php 配置文件中 找到 exception_handle 这个key 如下添加即可。
'exception_handle' => function($e){
if ($e instanceof \think\exception\ValidateException) {
return json($e->getError());
}else{
$h = new think\exception\Handle;
return $h->render($e);
},
然后 在route里面定义一个路由验证器试试。
Route::get('/', 'api/index/login')->validate(['name'=>'require'],null,['name.require'=>['code'=>33333,'msg'=>'确少name字段嘞!大锅']]);
测试效果如下:
彩蛋~~~~~:对源码的解读之后,才看懂的手册。
当然,你也可以修改源码(本来计划是发修改框架源码来实现的方法),以更简单更少代码实现。但是 我这里就不出教程了。因为,修改框架源码是得对框架源码有深入了解之后,再考虑是否真有必要修改。修改又要考虑到会不会影响其他人。所以,改源码的方法我就雪藏了^_^
当然,这是简便写法。 你还可以单独写个类 继承它的老爸 think\exception\handle 然后 实现 render 方法。然后把命名空间+类名 写到 exception_handle 后面 srting 类型;'exception_handle'=>'\\app\\xxx\\xxx\\类名';
实现方式大概如下:
<?php
namespace app\xxx\xxx;
use Exception;
use think\exception\Handle;
use think\exception\ValidateException;
calss myValidate extends Handle
{
public function render(Exception $e)
{
if ($e instanceof ValidateException) {
return json($e->getError());
}else{
return parent::render($e);
}
}
}
如果觉着文章还不错的话,左下角点赞????
(对于自己想要的东西,我一向会毫不掩饰的说出来的????)