亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用表單請求時 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")    ];}我想一起停止這個回復,只留下表單中的錯誤?;蛘咧辽僮远x它。編輯:我認為問題是請求是空的?如果我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 關注
  • 156 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號