您好,登錄后才能下訂單哦!
小編給大家分享一下在Laravel中處理請求驗證的示例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Laravel 是網絡工匠的 PHP 框架。這有助于我們構建強大的應用程序和 API。很多人都知道有很多方法可以驗證 Laravel 中的請求。處理請求驗證是任何應用程序中非常重要的部分。Laravel 有一些很好的功能,可以很好地處理這個問題。
入門
我們大多數人都熟悉在控制器中使用驗證器。這是處理傳入請求驗證的最常用方法。
以下是我們的驗證器的樣子 UserController
<?php namespace App\Http\Controllers\API\v1\Users; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use App\Entities\Models\User; class UserController extends Controller { public function store(Request $request) { // validate incoming request $validator = Validator::make($request->all(), [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]); if ($validator->fails()) { Session::flash('error', $validator->messages()->first()); return redirect()->back()->withInput(); } // finally store our user } }
在控制器中驗證
在控制器中驗證傳入請求沒有任何問題,但這不是最好的方法,你的控制器看起來很亂。在我看來,這是不好的做法。控制器應該只處理來自路由的一個處理請求并返回適當的響應。
在控制器中編寫驗證邏輯將打破單一責任原則。我們都知道需求會隨著時間的推移而變化,每次需求變更時,您的班級職責也會發生變化。因此,在單一班級中承擔很多責任使得管理變得非常困難。
Laravel 具有表單請求,一個包含驗證邏輯的單獨請求類。要創建一個,您可以在 Artisan 命令下使用。
php artisan make:請求 UserStoreRequest
這將創建新的 Request 類 app\Http\Request\UserRequest
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserStoreRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]; } /** * Custom message for validation * * @return array */ public function messages() { return [ 'email.required' => 'Email is required!', 'name.required' => 'Name is required!', 'password.required' => 'Password is required!' ]; } }
Laravel Form Request 類有兩個默認方法 auth() 和 rules()。auth() 無論當前用戶是否被允許請求,您都可以在方法中執行任何授權邏輯。在 rules() 方法中,您可以編寫所有驗證規則。還有一種方法 messages() 可以傳遞自己的驗證消息數組。
現在改變我們 UserController 使用我們 UserStoreRequest. 你可以輸入提示我們的請求類,它會在調用我們的控制器函數之前自動解析和驗證。
<?php namespace App\Http\Controllers\API\v1\Users; use App\Http\Controllers\Controller; use App\Http\Requests\UserStoreRequest; class UserController extends Controller { public function store(UserStoreRequest $request) { // Will return only validated data $validated = $request->validated(); } }
所以我們的控制器現在很纖薄,易于維護。現在我們的控制器不需要擔心任何驗證邏輯。我們有自己的驗證類,只有一個責任來處理驗證,讓控制器在那里工作。
如果驗證失敗,它會將用戶重定向到上一個位置并顯示錯誤。取決于您的請求類型錯誤消息將在會話中閃爍。如果請求是 AJAX,則將返回帶有 422 狀態代碼的響應,并返回 JSON 格式的錯誤。
回報
通過清理輸入來保持您的應用程序和用戶的安全。在您的應用程序中使用清潔劑,它將確保數據始終格式良好且一致。在許多情況下,由于愚蠢的格式錯誤,驗證失敗。
用戶輸入的移動電話號碼為 + 99-9999-999999 或 + 99-(9999) - (999999)。這是非常常見的錯誤,我們不能強迫我們的用戶再次重新輸入相同的細節。
其他一些例子是用戶輸入的電子郵件為 Foo@Bar.COM 或 FOO@Bar.com。或者輸入名字和姓氏,如 FOO **bAR 或 foo baR**
Sanitizer 包含在提供給驗證器之前以通用格式轉換和過濾數據的方法。
我正在使用 Waavi/Sanitizer 包含許多過濾器的包。
Waavi / 數據清洗
讓我們 BaseFormRequest 為 Form Request 創建抽象類,并 SanitizesInput 在這里使用 trait。
<?php namespace App\Http\Requests; use Illuminate\Contracts\Validation\Validator; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Http\JsonResponse; use Waavi\Sanitizer\Laravel\SanitizesInput; abstract class BaseFormRequest extends FormRequest { use ApiResponse, SanitizesInput; /** * For more sanitizer rule check https://github.com/Waavi/Sanitizer */ public function validateResolved() { { $this->sanitize(); parent::validateResolved(); } } /** * Get the validation rules that apply to the request. * * @return array */ abstract public function rules(); /** * Determine if the user is authorized to make this request. * * @return bool */ abstract public function authorize(); }
所以現在我們可以寫 UserStoreRequest 下面的內容。從我們的基類擴展您的表單請求,因此我們不必在所有請求類中包含特征。
<?php namespace App\Http\Requests; class UserStoreRequest extends BaseFormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'email' => 'required|email|unique:users', 'name' => 'required|string|max:50', 'password' => 'required' ]; } public function messages() { return [ 'email.required' => 'Email is required!', 'name.required' => 'Name is required!', 'password.required' => 'Password is required!' ]; } /** * Filters to be applied to the input. * * @return array */ public function filters() { return [ 'email' => 'trim|lowercase', 'name' => 'trim|capitalize|escape' ]; } }
SanitizesInputtrait 提供了一種 filters() 在提供給驗證器之前格式化我們的請求數據的方法。filters() 方法返回有效過濾器的數組。在這里,我們將用戶電子郵件轉換為小寫并修剪相同的方式將名稱轉換為大寫并轉義任何 HTML 標記。
看完了這篇文章,相信你對“在Laravel中處理請求驗證的示例”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。