控制器驗證

2018-02-24 15:52 更新

當然,如果每一次需要驗證的時候都手動的建立并且驗證 Validator 實例會非常的麻煩。不用擔心,你有其他的選擇!Laravel自帶的 App\Http\Controllers\Controller 基類使用了一個 ValidatesRequeststrait。這個 trait提供了一個單一的、便捷的方法來驗證 HTTP 請求。代碼如下:

/**
 * Store the incoming blog post.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ]);

    //
}

如果驗證通過了,你的代碼會正常繼續(xù)執(zhí)行。如果驗證失敗,那么會拋出一個 Illuminate\Contracts\Validation\ValidationException 異常。這個異常會被自動捕獲,然后重定向至用戶上一個頁面。而錯誤信息甚至已經(jīng)存儲至 session 中!

如果收到的是一個 AJAX 請求,那么不會生成一個重定向。相反的,一個帶有 422 狀態(tài)碼的 HTTP 響應會被返回給瀏覽器,包含了一個含有錯誤信息的 JSON 對象。

比如,如下是手動創(chuàng)建驗證的等效寫法:

/**
 * Store the incoming blog post.
 *
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request)
{
    $v = Validator::make($request->all(), [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ]);

    if ($v->fails())
    {
        return redirect()->back()->withErrors($v->errors());
    }

    //
}

自定義閃存后的錯誤格式

如果你想要自定義驗證失敗后已經(jīng)閃存至 session 的錯誤消息格式,可以通過覆蓋基類控制器的 formatValidationErrors。不要忘記在文件頂部引入 Illuminate\Validation\Validator 類。

/**
 * {@inheritdoc}
 */
protected function formatValidationErrors(Validator $validator)
{
    return $validator->errors()->all();
}
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號