欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何用 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字段嘞!大锅']]);

测试效果如下:

如何用 TP5、thinkPHP5.1 框架 接口开发 异常时返回json,validata 路由验证 失败后返回json(框架默认的是 debug返回异常页面 非debug返回空页面)

 

彩蛋~~~~~:对源码的解读之后,才看懂的手册。

当然,你也可以修改源码(本来计划是发修改框架源码来实现的方法),以更简单更少代码实现。但是 我这里就不出教程了。因为,修改框架源码是得对框架源码有深入了解之后,再考虑是否真有必要修改。修改又要考虑到会不会影响其他人。所以,改源码的方法我就雪藏了^_^

当然,这是简便写法。 你还可以单独写个类  继承它的老爸 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);
        }
    }
}

如果觉着文章还不错的话,左下角点赞????

(对于自己想要的东西,我一向会毫不掩饰的说出来的????)

上一篇:

下一篇: