同一個頁面有多個表單時, 如何區分不同表單間的錯誤資訊?
問題
我們通常使用 $errors->all()
方法可以獲取表單驗證的錯誤資訊,但是該方法會獲取此次請求中所有的錯誤資訊。
@if($errors->any())
<ul class="alert alert-danger">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
例如一個頁面中同時存在編輯專案和新增專案的表單,當你新增一個專案名稱為空的專案時,提交之後會失敗跳轉回之前的頁面,不僅在新增專案的表單中顯示錯誤資訊,編輯專案表單也會顯示錯誤資訊,這是不合邏輯的。
方法
可以通過在相應的表單請求驗證檔案中對 $errorBag
屬性賦值來區分,該屬性在 FormRequest.php 中的預設值為 default。
通過對 POST 和 PATCH 兩個方法來區分新增和編輯專案的路由,對 $errorBag 進行賦值, 不同專案的編輯之間進一步用路由引數 project 的值來區分。$this->errorBag = 'create';
$this->errorBag = 'update-' . $this->route('project');
然後在 blade 檢視中通過 getBag()
方法,該方法接收 $errorBag
的值來獲取不同表單對應的錯誤資訊,first()
方法顯示錯誤資訊,第一個引數是提交項的 name 值,第二個引數是錯誤顯示的格式。
本作品採用《CC 協議》,轉載必須註明作者和本文連結