laravel 中 api接口 使用 FormRequest 验证时,返回json格式的 validate错误信息(二)

  • James
  • 10个月前
  • 80 次阅读
  • 更新于 5天前

    在上一篇文章  Laravel中使用FormRequest进行表单验证及对验证异常进行自定义处理(一 )中我们讲解了如何使用FormRequest进行表单验证,下面我们讲解一下如何使用api调用时,返回 json 格式的 validate 错误信息。

 

解决办法一、

    同样是关注 App\Exceptions\Handler.php 这个文件是laravel的错误处理的地方,同样是要修改类中的 render() 方法

思路是 当validator验证出错的时候 laravel 抛出的是一个 validateException 类,并且laravel接口路由的前缀是 “api/”,那么我们可能从 request中匹配 路由是 “api/*” 的路由,如果是,并且 $exception 是 validateException的一个实例,则返回出自己定义的json数据

 

原始render()方法如下:

public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}

 

修改后的方法如下:

public function render($request, Exception $exception)
    {
        // 表单验证错误返回
        if($exception instanceof ValidationException){
            $result = [
                'code' => -200,
                'msg' => current(current($exception->errors()))
            ];
            return response()->json($result);
        }

        return parent::render($request, $exception);
    }

 

方法二、重写表单验证错误返回方法。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
use Illuminate\Contracts\Validation\Validator;   // 很重要 ,否则服务器会显示找不到类

class BaseRequest extends FormRequest
{
    /**
     * Notes: 重写表单验证错误返回状态
     * Date: 2019/4/25 11:30
     * @param \Illuminate\Contracts\Validation\Validator $validator
     */
    public function failedValidation(Validator $validator){
        throw new HttpResponseException(response()->json(['code'=>__LINE__, 'message'=>$validator->errors()->first()]));
    }
}

重写了failedValidation方法,将抛出错误处理为了json格式的。

然后在自定义的处理验证类中,继承该类就行了,

namespace App\Http\Requests;


class VmCouponRequest extends BaseRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'brand_id'          => 'required',
            'activity_dec_two'  => 'required',
            'description'       => 'required',
            'share_num'         => 'required',
            'share_picture'     => 'required',
            'share_title'       => 'required',
            'share_content'     => 'required',
            'launch_time'       => 'required',
            'join_num'          => 'required',
            'white_num'         => 'required',
            'background_no'     => 'required',
            'is_set_stock'      => 'required|in:0,1',
        ];
    }

    /**
     * Notes: 属性别名
     * Date: 2019/4/25 11:34
     * @return array
     */
    public function attributes()
    {
        return [
            'brand_id'          => '品牌',
            'activity_dec_two'  => '活动描述二',
            'description'       => '投放描述',
            'share_num'         => '可分享数量',
            'share_picture'     => '分享图片',
            'share_title'       => '分享标题',
            'share_content'     => '分享内容',
            'launch_time'       => '投放有效期',
            'join_num'          => '可参与次数',
            'white_num'         => '白名单领取次数',
            'background_no'     => '背景图编号',
            'is_set_stock'      => '是否设置库存',
        ];
    }
}

 以上就是本文的全部内容,希望对大家的学习有所帮助

 

原文地址:https://www.jb51.net/article/156495.htm


   本站文章除注明转载/出处外,均为本站原创或翻译。若要转载但请务必注明出处,尊重他人劳动成果。    本文链接: http://james.dmzfa.com/articles/laravel-zhong-api-jie-kou-shi-yong-formrequest-yan-zheng-shi-fan-hui-json-ge-shi-de-validate-cuo-wu-xin-xi-er

上一篇:30 分钟未付款自动取消订单

下一篇:Laravel中使用 FormRequest 进行表单验证之...

文章评论 (1)发表评论

  • 昵       称:james
    评论内容:
    总结的666

    2019-06-11 08:16:32  回复

Top