[英]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.