Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

Miachel_De_Santa發表於2020-06-14

同一個頁面有多個表單時, 如何區分不同表單間的錯誤資訊?

問題

我們通常使用 $errors->all() 方法可以獲取表單驗證的錯誤資訊,但是該方法會獲取此次請求中所有的錯誤資訊。

@if($errors->any())
    <ul class="alert alert-danger">
        @foreach($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

例如一個頁面中同時存在編輯專案和新增專案的表單,當你新增一個專案名稱為空的專案時,提交之後會失敗跳轉回之前的頁面,不僅在新增專案的表單中顯示錯誤資訊,編輯專案表單也會顯示錯誤資訊,這是不合邏輯的。

Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

方法

可以通過在相應的表單請求驗證檔案中對 $errorBag 屬性賦值來區分,該屬性在 FormRequest.php 中的預設值為 default。
Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

通過對 POST 和 PATCH 兩個方法來區分新增和編輯專案的路由,對 $errorBag 進行賦值, 不同專案的編輯之間進一步用路由引數 project 的值來區分。
$this->errorBag = 'create';
$this->errorBag = 'update-' . $this->route('project');
Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

然後在 blade 檢視中通過 getBag() 方法,該方法接收 $errorBag 的值來獲取不同表單對應的錯誤資訊,first() 方法顯示錯誤資訊,第一個引數是提交項的 name 值,第二個引數是錯誤顯示的格式。

Michael 的 Laravel 學習總結:區分同一頁面中不同表單的表單驗證錯誤資訊

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章