为了账号安全,请及时绑定邮箱和手机立即绑定

使用表单请求时 Laravel 的“给定数据无效”

使用表单请求时 Laravel 的“给定数据无效”

PHP
郎朗坤 2021-06-17 10:05:16
所以我有一个包含验证规则和一些消息的表单请求。这是我在控制器中的函数(通过 vue.axios 调用)public function store(TaskFormRequest $request, TaskService $service): JsonResponse{    $data = $request->validated();    if (!$task = $service->create($data)) {        return JsonResponse::create(['message' => __('Can\'t create Task')], 400);    }    return JsonResponse::create(        [            'task_id' => $task->id,            'message' => __('Task was successfully added.'),        ]    );}它工作正常,除了当数据未验证时调用时刻存储(并且 $request 被视为 TaskFormRequest 实例),除了来自表单的错误消息外,它还返回“给定的数据无效”JsonResponse。这很好,但消息本身深埋在 Vendor 中,我无法对其应用任何翻译,否则会很麻烦。这是我的表单请求:public function authorize(): bool{    return $this->user()->role === 'administrator';}public function rules(): array{    return [        'subject' => 'required',        'date' => 'nullable|date_format:Y-m-s',        'user' => 'nullable|exists:users,id',        'task_list_id' => 'required|exists:task_lists,id',        'privacy' => 'array',    ];}public function messages() {    return [        'subject.required' => __("Task name is empty")    ];}我想一起停止这个回复,只留下表单中的错误。或者至少自定义它。编辑:我认为问题是请求是空的?如果我null在store函数的参数中输入默认值,我可以检查空的 $request 并返回一个 JsonResponse,但它不会通过正常的验证过程。
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

我也遇到了同样的问题。如果您的验证代码在 try 块中,您将收到“给定的数据无效”错误。从 try 块中删除它,您将获得 Laravel 给出的正确错误响应。


查看完整回答
反对 回复 2021-06-19
?
湖上湖

TA贡献2003条经验 获得超2个赞

当你删除你的messages()功能时会发生什么?

date_format:Y-m-s好像错了,不应该date_format:Y-m-d吗?)


查看完整回答
反对 回复 2021-06-19
?
呼唤远方

TA贡献1856条经验 获得超11个赞

验证器抛出一个Illuminate\Validation\ValidationException你可以App\Exceptions\Handler->render()在它被发送到供应商的父类之前拦截的。


if ($exception instanceof ValidationException) {

    //choose the structure you want. the Validation exception has many methods

    return response()->json(['status' => 'error', 'message' => $exception->getMessage()], 422);

}

编辑:为了拦截表单请求本身的错误,声明以下方法:


public function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)

{

    throw (new \Illuminate\Validation\ValidationException($validator))

                ->errorBag($this->errorBag)

                ->redirectTo($this->getRedirectUrl());

}


查看完整回答
反对 回复 2021-06-19
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号