Laravel 中的數據驗證:方便而強大

已發表: 2023-05-03

現在比以往任何時候都更重要的是,應用程序中的數據有效、準確並滿足所有系統要求。 它解決了維護數據一致性和避免安全漏洞的需要。

Laravel 使數據驗證變得簡單直觀。 它遵循模型視圖控制器 (MVC) 架構,只需要 PHP 和麵向對象編程 (OOP) 概念的一般知識。 此外,Laravel 提供了幾種驗證傳入數據的方法。

探索其中一些方法以及如何將驗證規則應用於您的數據集。

Laravel 中的數據驗證變得簡單

當您的應用程序的用戶通過表單提交數據時,Laravel 提供了幾個現成的驗證規則。 您可以根據需要標記輸入字段,設置最小或最大長度,並要求唯一(非重複)條目和有效的電子郵件地址。 Laravel 驗證器檢查輸入是否滿足這些規則或您指定的任何其他規則。

這些 Laravel 驗證規則包括:

  • required — 字段數據不能為 null 或為空。
  • array — 字段數據必須是 PHP 數組。
  • bail — 驗證規則在遇到第一次驗證失敗後停止執行。
  • email - 字段數據必須是有效的電子郵件地址。
  • unique — 字段數據在數據庫表中不得重複。

所有驗證方法都有利弊,但它們的多樣性使您能夠選擇最適合您需求的方法。 根據您選擇的方法,Laravel 驗證可以通過多種方式進行,包括手動或自動錯誤消息。

最常見的方法是 code>validate,用於傳入的 HTTP 請求。 此方法鏈接到請求數據,執行驗證規則。 您可以用逗號分隔每個字段的規則,如下例所示。

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

在這裡, email是必需的輸入,這意味著它不能為空。 此外,它在users數據庫表中必須是唯一的,以確保相同的電子郵件地址不會被註冊兩次。 最後一條規則規定電子郵件地址也必須有效。 否則,驗證過程停止。 名稱字段是必需的,但沒有其他規則。

如果任何 Laravel 驗證規則失敗,將自動生成響應。

不要讓一個數據錯誤毀了你所有的努力! 驗證您的數據並確保您的項目安全無虞️ 點擊推文

驗證基礎

為了更好地理解驗證方法,請考慮以下示例。 您將為端點定義一個路由,並創建一個控制器來驗證和處理請求數據。

首先,創建一個簡單的端點,允許用戶存儲他們的電子郵件和密碼。

定義路線

Laravel 路由在 Web 應用程序的routes/web.php文件或 API 的routes/api.php文件中定義。 對於這個例子,使用api.php

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

創建控制器

運行這個 Artisan 命令來創建控制器:

 php artisan make:controller UserController

此命令在app/Http/Controllers目錄中創建一個UserController.php文件。

現在,定義一個store方法來在存儲數據之前驗證進入存儲端點的數據。

此示例將使用這些規則驗證以下字段:

  • 電子郵件- 應該是唯一的,有效的電子郵件,並且必須是必需的
  • 密碼- 應該有最小長度,密碼確認,並且必須是必需的
  • 年齡- 必須是一個數字並且必須是必需的
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }

confirmed規則允許您要求特定字段兩次以驗證數據是否準確,例如用戶在註冊期間重新輸入密碼。 此規則需要一個名為password_confirmation字段,其數據必須與密碼字段匹配。

顯示錯誤信息

如果滿足驗證條件,您的代碼將繼續正常運行。 如果驗證失敗,則拋出IlluminateValidationValidationException異常,並返回適當的錯誤響應。

該示例基於一個 API,它以 JSON 格式返回422 Unprocessable Entity HTTP 響應。 對於 web 應用程序,它將重定向到以前的 URL 以顯示錯誤消息,並將請求數據閃到會話中。

您可以在視圖中使用$errors變量來顯示返回的錯誤:

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

您還可以選擇僅查看第一個錯誤或循環查看所有錯誤。

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

重新填寫表格

重新填充表單使用戶無需重新輸入信息,因此他們可以專注於修復錯誤。 在電子郵件地址失敗的示例中,您可以通過調用name字段的舊值來重新填充表單的其餘部分。

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

如果之前沒有輸入,則此規則將返回null

高級驗證

Laravel 提供了另一種編寫驗證的方法,稱為表單請求。 表單請求是一個自定義請求類,它組織驗證並整理您的控制器。

它們有自己的適用於大輸入量的驗證和授權邏輯,可用於定義驗證規則和自定義錯誤消息。

要創建表單請求,請運行以下 Artisan 命令:

 php artisan make:request StoreUserRequest

此命令在app/Http/Requests目錄中創建一個StoreUserRequest.php文件,並包含兩個默認方法:

  • rules返回請求數據的驗證規則。
  • authorize返回一個布爾值來表示該用戶是否有權執行請求的操作。

將前面的示例轉換為使用表單請求。

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }

要自定義這些規則的錯誤消息,您可以覆蓋FormRequest類中的 messages 方法。

 /** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }

注意:數據名稱和驗證規則在消息數據之前以句點(.)分隔。

自定義驗證

要創建自定義驗證,您可以使用Validator facade 而不是validate 。 驗證器實例包含兩個參數:要驗證的數據和一組驗證規則。 這兩個參數被傳遞給驗證器外觀上的::make方法,生成一個新的驗證器實例。

 use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }

如果你想添加一個自動直接,你可以在一個預先存在的驗證器實例上執行validate方法。 如果驗證失敗,XHR 請求會生成一個 JSON 響應,其中包含422 Unprocessable Entity作為狀態代碼,否則用戶將被立即重定向。

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

您還可以通過將名為messages的第三個參數傳遞給Validate::make method來自定義錯誤消息:

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);

注意:: :attribute替換為驗證中的字段名稱。

處理大量數據可能會迅速失控。 使用 Laravel 驗證保護您的項目(和您的理智!)。 這是點擊推文的方法

概括

執行數據驗證對於保持數據集乾淨、正確和完整至關重要。 數據驗證使您能夠消除數據中可能損壞或以其他方式影響項目的錯誤。 在大規模處理大量數據時,驗證變得越來越重要。

Laravel 支持多種靈活的方法來確保通過您的應用程序的數據的完整性和準確性。 您可以使用默認和可自定義的方法實現複雜的驗證邏輯,使您的代碼庫結構良好且更易於重用。

使用 Kinsta 的應用程序託管服務更快地發布您的 Laravel 應用程序。