【问题标题】:Format FormRequest Validation Error Response格式化 FormRequest 验证错误响应
【发布时间】:2017-02-09 03:23:14
【问题描述】:

参考这个stack question and answer 我正在尝试将我的错误验证的响应格式化为更简化的格式......因此在自定义 App\Http\Requests\CustomRequest 我有

public function rules()

{
    return [
        'amt' => 'required|numeric|min:1000',
        'year' => 'required|numeric|min:' . date_format(new \DateTime, 'Y'),
        'user_id' => 'required',
        'ratio' => 'required'
    ];
}

public function response(array $errors)
   {
       if ($this->expectsJson()) {
          return response()->json(['messsage'=>'Cannot Validate','errors'=> $errors]);
       }

       return $this->redirector->to($this->getRedirectUrl())
                                       ->withInput($this->except($this->dontFlash))
                                       ->withErrors($errors, $this->errorBag);
   }

/**
    * Format the errors from the given Validator instance.
    *
    * @param  \Illuminate\Contracts\Validation\Validator  $validator
    * @return array
    */
   protected function formatErrors(Validator $validator)
   {
       return [];
   }

在我的控制器中

/**
     * Store a newly created resource in storage.
     *
     * @param \Illuminate\Http\Request $request
     *
     * @return Response Header 201
     */
    public function store(CustomFormRequest $request)
    {

        $requestData = $request->all();
        Budget::create($requestData);

        return response([], 201);
    }

根据 laravel 文档,我只需要“输入提示”请求。但是我的反应总是。

{"id":"validation_failed","message":"验证 失败。","meta":{"errors":{"amt":[{"rule":"min.numeric","message":"The amt 必须至少为 1000。","parameters":["1000"]}]}}}

如果我要更改响应格式,这没有任何意义。我需要的是

{"id":"validation_failed","message":"验证 失败。","errors":[{"amt":{"message":"The amt 必须至少为 1000。"}}]}

我不确定此时我应该做什么。还有什么?

【问题讨论】:

  • 刚刚实现了覆盖默认输出的功能。因此,如果您仍然需要它,只需查看软件包的自述文件即可。

标签: php validation laravel-5.3


【解决方案1】:

边信道通信 (IRC) 显示 Kendall 正在使用lanin/laravel-api-exceptions。这个包有一个自定义异常处理程序,将 Laravel 的内置 ValidationException 更改为自定义异常类,以及自定义输出处理。提示输出不是由 Laravel 生成的可以是 json 输出中的 meta 键,Laravel 不会生成。

问题中提到了FormRequest的response(array $errors)formatErrors(Validator $validator)方法,但是这个包没有用到。

可以通过覆盖自定义异常处理程序的renderForApi方法修改验证失败的json结果,检查ValidationFailedApiException,并为这些返回自定义响应。

【讨论】:

    【解决方案2】:

    要获得自定义错误消息,我想您正在寻找 messages 方法。在该方法上,只需返回一个数组。

    示例:['fieldName.rule' => 'Custom message']

    见:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_messages

    奖励:如果您想命名字段名称,也只需创建一个 attributes 方法。

    见:https://laravel.com/api/5.3/Illuminate/Foundation/Http/FormRequest.html#method_attributes

    【讨论】:

    • 我并没有真正尝试更改文本消息,而是更多地更改 json 对象结构....查看更新的问题
    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 2021-02-05
    • 2015-11-25
    • 1970-01-01
    • 2017-06-30
    • 2016-06-04
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多