簡體   English   中英

Laravel,處理 Controller 中的驗證錯誤

[英]Laravel, Handling validation errors in the Controller

所以我正在使用以下代碼驗證表單的輸入:

$request->validate([
    'title' => 'bail|required|max:255',
    'body' => 'required',
]);

所以基本上,表單中有兩個字段,一個標題和一個正文,它們具有上述規則。 現在,如果驗證失敗,我想直接在 controller 中捕獲錯誤,然后再重定向到視圖,以便我可以發送錯誤消息作為對 Post 請求的響應。 最好的方法是什么? 我知道錯誤被推送到 session 但這是為了處理視圖,但我想在 controller 本身中處理此類錯誤。

謝謝

如果您查看官方文檔,您會發現可以以不同的方式處理輸入驗證。

在您的情況下,最好的解決方案是手動創建驗證器,以便您可以在控制器內設置自己的邏輯。

如果您不想在請求上使用 validate 方法,您可以使用 Validator 外觀手動創建一個驗證器實例。

這里有一個小例子:

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'title' => 'bail|required|max:255',
        'body' => 'required',
    ]);

    // Check validation failure
    if ($validator->fails()) {
       // [...]
    }

    // Check validation success
    if ($validator->passes()) {
       // [...]
    }

    // Retrieve errors message bag
    $errors = $validator->errors();
}

對於想知道如何在 controller 中的頁面重定向后獲取驗證錯誤的人:

$errors = session()->get('errors');
if ($errors) {

    //Check and get the first error of the field "title"
    if ($errors->has('title')) {
         $titleError = $errors->first('title');
    }

    //Check and get the first error of the field "body"
    if ($errors->has('body')) {
         $bodyError = $errors->first('body');
    }
}

$errors將包含一個 Illuminate/Contracts/Support/MessageBag 的實例

您可以在此處閱讀有關 API 的更多信息: https://laravel.com/api/8.x/Illuminate/Contracts/Support/MessageBag.html

注意:我已經在 Laravel 8 中對其進行了測試,如果您從 session 獲得 MessageBag,它應該適用於 Laravel 6+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM