laravel 开发api时 参数是如何验证的?

laravel 自带的表单验证,验证失败后会重定向,但是我希望返回json。

查看了文档和网上的解决方案后,总结下面几种方式:

  1. 修改底层代码
  2. 手动创建验证器
  3. 其他

    大家开发时是如何实现的?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

表单验证失败会抛出 ValidationException ,Laravel 异常处理会针对请求头返回相应的结果:

file

如果请求头的 accept 含有 json 就会返回 JsonResponse:

框架自带的响应格式:
file

如果需要变更响应格式,更改 \App\Exceptions\Handler::render 方法:

    public function render($request, Exception $exception)
    {
        if($exception instanceof ValidationException){
              return response()->json([]);// 从 exception 中获取错误信息
         }

        return parent::render($request, $exception);
    }
2年前 评论
raybon 2年前
讨论数量: 14

表单验证失败会抛出 ValidationException ,Laravel 异常处理会针对请求头返回相应的结果:

file

如果请求头的 accept 含有 json 就会返回 JsonResponse:

框架自带的响应格式:
file

如果需要变更响应格式,更改 \App\Exceptions\Handler::render 方法:

    public function render($request, Exception $exception)
    {
        if($exception instanceof ValidationException){
              return response()->json([]);// 从 exception 中获取错误信息
         }

        return parent::render($request, $exception);
    }
2年前 评论
raybon 2年前
chowjiawei

file

2年前 评论

参考文档:表单验证《Laravel 8 中文文档》 文档中的原文:

所以,验证规则是如何运行的呢?你所需要做的就是在控制器方法中类型提示传入的请求。在调用控制器方法之前验证传入的表单请求,这意味着你不需要在控制器中写任何验证逻辑:

2年前 评论

手动创建验证器

2年前 评论

我会在控制器中添加 validate 验证参数 laravel验证规则

2年前 评论

手动创建验证器

 $validator = Validator::make($request->post(), [
    'number' => ['required', 'integer', 'between:1,100'],
    ], [
    'number.required' => '请输入数量',
    'number.between' => '数量必须在1-100之间'
]);
2年前 评论

引用验证类。规则比较多的时候,可以定义成一个变量

2年前 评论

表单验证失败会抛出 ValidationException ,Laravel 异常处理会针对请求头返回相应的结果:

file

如果请求头的 accept 含有 json 就会返回 JsonResponse:

框架自带的响应格式:
file

如果需要变更响应格式,更改 \App\Exceptions\Handler::render 方法:

    public function render($request, Exception $exception)
    {
        if($exception instanceof ValidationException){
              return response()->json([]);// 从 exception 中获取错误信息
         }

        return parent::render($request, $exception);
    }
2年前 评论
raybon 2年前
<?php
namespace App\Apis\V1\Http\Requests;

class ChargeDetailsRequest extends BaseRequest
{
    public function rules()
    {
        return [
            'from' => 'required|date_format:Y-m-d H:i:s',
            'to' => 'required|date_format:Y-m-d H:i:s',
            'entry_to_my' => 'required|in:false,true',
            'cdw' => 'required|in:false,true',
            'pai' => 'required|in:false,true',
            'add_drivers' => 'string',
        ];
    }
}
<?php
namespace App\Apis\V1\Http\Requests;

use App\Exceptions\Api\ApiRequestException;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;

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

    /**
     * @param  Validator  $validator
     * @throws ApiRequestException
     */
    protected function failedValidation(Validator $validator)
    {
        $error = $validator->errors()->all();
        throw new ApiRequestException($error[0]);
    }
}
2年前 评论

就API来说,除了及个别的接口,设计到增加修改,一般也就几个参数,还都是列表居多,一般就用PHP判断一下,抛出一个异常,然后重写异常处理就可以了。

2年前 评论

只要你的请求是 ajax 的,验证错误,会自动转为 json,而不是跳转页面,,

2年前 评论
DonnyLiu

手动码验证器吧

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!