中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中怎么實現表單驗證分層設計

發布時間:2021-07-31 19:38:28 來源:億速云 閱讀:293 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關Laravel中怎么實現表單驗證分層設計,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

安裝

composer require w7/engine-validate

介紹

首先此驗證器也是基于illuminate/validation的,關于它的詳細說明可以直接查看它的文檔,這里就不過多說明了。

使用

首先我們建立一個和控制器相對應的驗證層

app
├── Http
│   ├── Controllers
│   │   └── UserController.php
│   └── Validate
│       └── UserValidate.php

驗證器

驗證器代碼:

class UserValidate extends Validate{
    protected $rule = [
        'user' => 'required|email',
        'pass' => 'required|alpha_num'
    ];

    protected $message = [
        'user.required' => '賬號不可為空',
        'pass.required' => '密碼不可為空',
    ];

    protected $customAttributes = [
       'user' => '賬號',
       'pass' => '密碼',
    ];}

控制器代碼:

class UserController extends BaseController{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function login(Request $request)
    {
        $data = UserValidate::make()->check($request->all());
    }}

這個時候,如果值不符合要求,會拋出一個ValidateException異常,我們可以選擇手動捕獲,也可以選擇在異常捕獲類里面做一個全局的處理:

    public function render($request, Throwable $e)
    {
        if ($e instanceof ValidateException) {
            return response()->json([
                'code'    => -1,
                'message' => $e->getMessage()
            ]);
        }

        return parent::render($request, $e);
    }

這樣我們就不需要再控制器里面管理任何的驗證異常了。

此時,控制器中的$data一定是符合我們需求的數據,然后可以緊接著做對應的業務處理

驗證場景

這個時候,如果我們的UserController控制器中又添加了一個register方法,在以上兩個字段的需求同時增加了name,應該如何處理呢?

我們可以使用類的$scene屬性來指定某一場景下需要驗證的字段

驗證器代碼修改如下:

class UserValidate extends Validate{
    protected $rule = [
        'user' => 'required|email',
        'pass' => 'required|alpha_num',
        'name' => 'required|alpha'
    ];

    protected $message = [
        'user.required' => '賬號不可為空',
        'pass.required' => '密碼不可為空',
    ];

    protected $customAttributes = [
       'user' => '賬號',
       'pass' => '密碼',
       'name' => '用戶名稱',
    ];

    protected $scene = [
       'login'    => ['user', 'pass'],
       'register' => ['user', 'pass', 'name']
    ];}

此時:login場景對應的驗證userpass字段,而register場景對應的驗證user,pass,name字段

控制器代碼修改如下:

class UserController extends BaseController{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function login(Request $request)
    {
        $data = UserValidate::make()->scene('login')->check($request->all());
    }

    public function register(Request $request)
    {
        $data = UserValidate::make()->scene('register')->check($request->all());
    }}

使用驗證器的scene方法來指定當前需要驗證的場景名稱

驗證中間件

默認我們一個控制器對應一個驗證器,一個方法對應一個場景名稱,基于此特點,我們可以編寫一些更為簡易的方法來解決驗證,我們可以編寫一個中間件來解決此問題,點擊查看文檔說明,中間件完整命名空間為:Itwmw\Validate\Middleware\Laravel\ValidateMiddleware

中間件設置

首先我們需要為他指定控制器和驗證器的對應關系,在app/Providers目錄下新建一個ValidateServiceProvider.php文件,寫入如下代碼:

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Itwmw\Validate\Middleware\ValidateMiddlewareConfig;
class ValidateServiceProvider extends ServiceProvider{
    public function register()
    {
        ValidateMiddlewareConfig::instance()
            ->setAutoValidatePath('App\\Http\\Controllers\\', 'App\\Http\\Validate\\');
    }}

其中setAutoValidatePath為指定控制器和驗證器的對應關系,可以設定多個,不限制數量,然后我們將ValidateServiceProvider注冊一下,在config/app.php文件中找到providers,在其中添加App\Providers\ValidateServiceProvider::class

注意:不可以放在Illuminate\Validation\ValidationServiceProvider::class之前

使用中間件

這個時候,我們可以將中間件注冊為全局中間件,也可以不注冊,注冊方法:中間件《Laravel 7 中文文檔》

定義路由:

Route::middleware(ValidateMiddleware::class)->group(function () {
    Route::any('/login', [\App\Http\Controllers\UserController::class, 'login']);
    Route::any('/register', [\App\Http\Controllers\UserController::class, 'register']);});

控制器代碼修改如下:

class UserController extends BaseController{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function login(Request $request)
    {
        $data = get_validate_data($request);
    }

    public function register(Request $request)
    {
        $data = get_validate_data($request);
    }}

以上就是Laravel中怎么實現表單驗證分層設計,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山东省| 伊川县| 偃师市| 通江县| 石景山区| 喀喇沁旗| 治县。| 双桥区| 普安县| 五原县| 酉阳| 江门市| 平阳县| 化德县| 依兰县| 南江县| 梅河口市| 青铜峡市| 若羌县| 安多县| 广昌县| 天全县| 晋中市| 宝鸡市| 天等县| 广昌县| 抚顺县| 丁青县| 京山县| 白水县| 深圳市| 湛江市| 太谷县| 前郭尔| 中卫市| 德州市| 安宁市| 汉源县| 阜阳市| 夏津县| 治多县|