亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 為你的 Laravel 驗證器加上多驗證場景的實現

為你的 Laravel 驗證器加上多驗證場景的實現

熱門標簽:南京3D地圖標注 南寧電話外呼系統線路 重慶外呼電銷系統多少錢 咸陽電銷 濟源百應電銷機器人聯系方式 邢臺400電話辦理 辦理400電話哪家好點 正規電銷機器人系統 嘟嘟云外呼系統

前言

在我們使用 laravel 框架的驗證器,有的時候需要對表單等進行數據驗證,當然 laravel 也為我們提供了
Illuminate\Http\Request 對象提供的 validate 方法 以及 FormRequest 和 Validator。

FormRequest 通過新建文件將我們的驗證部分單獨分開,來避免控制器臃腫。如果驗證失敗,就會生成一個讓用戶返回到先前的位置的重定向響應。這些錯誤也會被閃存到 Session 中,以便這些錯誤都可以在頁面中顯示出來。如果傳入的請求是 AJAX,會向用戶返回具有 422 狀態代碼和驗證錯誤信息的 JSON 數據的 HTTP 響應。如果是接口請求或 ajax, 那么我們可能還需要將返回的 json 數據修改成我們想要的格式。

當我們實際開發中,可能一個模塊需要有多個驗證場景,如果為每一個驗證場景都新建一個 FormRequest 不就太過繁瑣了。
那么給 laravel 加上一個驗證場景通過一個驗證類一個模塊或多個模塊來適應不同的場景不就方便很多了。

開始

首先 我們封裝了一個基類 BaseValidate.php 并將其放在 app\Validate 下,當然你也可以放在其他地方,只要修改好命名空間就好。

?php
namespace App\Validate;

use Illuminate\Support\Facades\Validator;
/**
 * 擴展驗證器
 */
class BaseValidate {

  /**
   * 當前驗證規則
   * @var array
   */
  protected $rule = [];

  /**
   * 驗證提示信息
   * @var array
   */
  protected $message = [];

  /**
   * 驗證場景定義
   * @var array
   */
  protected $scene = [];

  /**
   * 設置當前驗證場景
   * @var array
   */
  protected $currentScene = null;

  /**
   * 驗證失敗錯誤信息
   * @var array
   */
  protected $error = [];

  /**
   * 場景需要驗證的規則
   * @var array
   */
  protected $only = [];


  /**
   * 設置驗證場景
   * @access public
   * @param string $name 場景名
   * @return $this
   */
  public function scene($name)
  {
    // 設置當前場景
    $this->currentScene = $name;

    return $this;
  }

  /**
   * 數據驗證
   * @access public
   * @param array   $data 數據
   * @param mixed   $rules 驗證規則
   * @param array  $message 自定義驗證信息
   * @param string  $scene 驗證場景
   * @return bool
   */
  public function check($data, $rules = [], $message = [],$scene = '')
  {
    $this->error =[];
    if (empty($rules)) {
      //讀取驗證規則
      $rules = $this->rule;
    }
    if (empty($message)) {
      $message = $this->message;
    }

    //讀取場景
    if (!$this->getScene($scene)) {
      return false;
    }

    //如果場景需要驗證的規則不為空
    if (!empty($this->only)) {
      $new_rules = [];
      foreach ($this->only as $key => $value) {
        if (array_key_exists($value,$rules)) {
          $new_rules[$value] = $rules[$value];
        }  
      }
      $rules = $new_rules;
    }
    // var_dump($rules);die;
    $validator = Validator::make($data,$rules,$message);
    //驗證失敗
    if ($validator->fails()) {
      $this->error = $validator->errors()->first();
      return false;
    }

    return !empty($this->error) ? false : true;
  }

  /**
   * 獲取數據驗證的場景
   * @access protected
   * @param string $scene 驗證場景
   * @return void
   */
  protected function getScene($scene = '')
  {
    if (empty($scene)) {
      // 讀取指定場景
      $scene = $this->currentScene;
    }
    $this->only = [];

    if (empty($scene)) {
      return true;
    }

    if (!isset($this->scene[$scene])) {
      //指定場景未找到寫入error
      $this->error = "scene:".$scene.'is not found';
      return false;
    }
    // 如果設置了驗證適用場景
    $scene = $this->scene[$scene];
    if (is_string($scene)) {
      $scene = explode(',', $scene);
    }
    //將場景需要驗證的字段填充入only
    $this->only = $scene;
    return true;
  }

  // 獲取錯誤信息
  public function getError()
  {
    return $this->error;
  } 
}

使用

接下來我們來驗證一個文章的提交信息,首先我們新建一個文章驗證類 ArticleValidate.php 并填充一些內容

?php
namespace App\Validate;

use App\Validate\BaseValidate;
/**
 * 文章驗證器
 */
class ArticleValidate extends BaseValidate {
  //驗證規則
  protected $rule =[
    'id'=>'required',
    'title' => 'required|max:255',
    'content' => 'required',
  ];
  //自定義驗證信息
  protected $message = [
    'id.required'=>'缺少文章id',
    'title.required'=>'請輸入title',
    'title.max'=>'title長度不能大于 255',
    'content.required'=>'請輸入內容',
  ];

  //自定義場景
  protected $scene = [
    'add'=>"title,content",
    'edit'=> ['id','title','content'],
  ];
}

如上所示,在這個類中我們定義了驗證規則 rule,自定義驗證信息 message,以及驗證場景 scene

非場景驗證

我們只需要定義好規則

public function update(){

    $ArticleValidate = new ArticleValidate;

    $request_data = [
      'id'=>'1',
      'title'=>'我是文章的標題',
      'content'=>'我是文章的內容',
    ];

    if (!$ArticleValidate->check($request_data)) {
      var_dump($ArticleValidate->getError());
    }
  }

check 方法中總共有四個參數,第一個要驗證的數據,第二個驗證規則,第三個自定義錯誤信息,第四個驗證場景,其中 2,3,4 非必傳。
如果驗證未通過我們調用 getError() 方法來輸出錯誤信息,getError()暫不支持返回所有驗證錯誤信息 。

場景驗證

我們需要提前在驗證類中定義好驗證場景

如下,支持使用字符串或數組,使用字符串時,要驗證的字段需用 , 隔開

//自定義場景
  protected $scene = [
    'add'=>"title,content",
    'edit'=> ['id','title','content'],
  ];

然后在我們的控制器進行數據驗證

public function add(){

    $ArticleValidate = new ArticleValidate;

    $request_data = [
      'title'=>'我是文章的標題',
      'content'=>'我是文章的內容',
    ];

    if (!$ArticleValidate->scene('add')->check($request_data)) {
      var_dump($ArticleValidate->getError());
    }

  }

控制器內驗證

當然我們也允許你不創建驗證類來驗證數據,

public function add(){

    $Validate = new BaseValidate;

    $request_data = [
      'title'=>'我是文章的標題',
      'content'=>'我是文章的內容',
    ];

    $rule =[
      'id'=>'required',
      'title' => 'required|max:255',
      'content' => 'required',
    ];
    //自定義驗證信息
    $message = [
      'id.required'=>'缺少文章id',
      'title.required'=>'請輸入title',
      'title.max'=>'title長度不能大于 255',
      'content.required'=>'請輸入內容',
    ];

    if (!$Validate->check($request_data,$rule,$message)) {
      var_dump($Validate->getError());
    }
  }

通過驗證場景,既減少了控制器代碼的臃腫,又減少了 FormRequest 文件過多,還可以自定義 json 數據是不是方便多了呢,

參考文檔

laravel 表單驗證 :表單驗證《Laravel 5.5 中文文檔》
thinkphp 驗證場景 :https://www.kancloud.cn/manual/thinkphp5_1/354104

到此這篇關于為你的 Laravel 驗證器加上多驗證場景的實現的文章就介紹到這了,更多相關Laravel 驗證器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

本文為楊攀遙原創文章,如若轉載,無需和我聯系,但請注明出處 [楊攀遙的博客]:https://www.yangpanyao.com/archives/120.html

您可能感興趣的文章:
  • Laravel框架表單驗證詳解
  • Laravel 5框架學習之表單驗證
  • 使用 laravel sms 構建短信驗證碼發送校驗功能
  • Laravel中unique和exists驗證規則的優化詳解
  • Laravel框架用戶登陸身份驗證實現方法詳解
  • Laravel 5.5 的自定義驗證對象/類示例代碼詳解
  • laravel中短信發送驗證碼的實現方法
  • laravel5.4生成驗證碼的實例講解
  • laravel5.4生成驗證碼的代碼

標簽:河南 隴南 黃山 通遼 武漢 南通 平頂山 唐山

巨人網絡通訊聲明:本文標題《為你的 Laravel 驗證器加上多驗證場景的實現》,本文關鍵詞  為,你的,Laravel,驗證,器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《為你的 Laravel 驗證器加上多驗證場景的實現》相關的同類信息!
  • 本頁收集關于為你的 Laravel 驗證器加上多驗證場景的實現的相關信息資訊供網民參考!
  • 推薦文章
    国产国语在线播放视频| 你懂的在线观看视频| 日韩专区一区| 韩国毛片 免费| 国产精品自拍亚洲| 久草免费在线视频| 毛片高清| 日本在线www| 二级特黄绝大片免费视频大片| 亚洲精品久久久中文字| 久久99中文字幕| 亚欧乱色一区二区三区| 天天色成人| 国产视频在线免费观看| 国产成人啪精品视频免费软件| 日韩一级黄色片| 日韩专区一区| 久久国产精品自线拍免费| 天天色成人| a级毛片免费全部播放| 麻豆系列 在线视频| 国产一区二区精品久久| 精品国产香蕉在线播出| 久草免费在线色站| 国产成人女人在线视频观看| 毛片成人永久免费视频| 国产视频一区二区在线观看| 麻豆系列 在线视频| 国产高清在线精品一区a| 成人av在线播放| 四虎影视久久| 国产韩国精品一区二区三区| 一级毛片视频在线观看| 亚欧乱色一区二区三区| 国产视频久久久| 99色视频在线观看| 欧美激情伊人| 国产伦久视频免费观看 视频 | 亚洲www美色| 亚欧视频在线| 国产一区二区精品| 欧美激情在线精品video| 美女免费精品高清毛片在线视| 欧美爱色| 国产综合成人观看在线| 亚洲天堂免费| 青青青草视频在线观看| 四虎论坛| 深夜做爰性大片中文| 免费一级生活片| 免费一级片在线观看| 九九久久99综合一区二区| 91麻豆tv| 日本乱中文字幕系列| 日韩中文字幕在线观看视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 成人高清护士在线播放| 青青久久精品国产免费看| 国产精品12| 成人高清视频在线观看| 国产高清视频免费观看| 一级女人毛片人一女人| 亚洲精品久久玖玖玖玖| 一级女性大黄生活片免费| 91麻豆国产| 成人a级高清视频在线观看| 麻豆网站在线看| 九九免费高清在线观看视频| 国产视频一区二区在线观看| 天天色色网| 欧美一级视| 国产成人啪精品| 国产一区二区精品| 日韩一级黄色| 国产韩国精品一区二区三区| 精品久久久久久中文字幕2017| 精品视频一区二区三区免费| 一本高清在线| 可以免费看污视频的网站| 国产一区二区精品久| 欧美激情影院| 九九精品久久久久久久久| 欧美另类videosbestsex| 91麻豆精品国产片在线观看| 国产综合成人观看在线| 免费国产在线视频| 99久久精品国产国产毛片| 精品毛片视频| 精品国产一区二区三区久久久蜜臀| 999精品在线| 99色精品| 日本免费乱理伦片在线观看2018| 日本在线不卡视频| 国产亚洲精品成人a在线| 国产一区二区精品久| 精品国产亚洲一区二区三区| 国产成a人片在线观看视频| 一级女性大黄生活片免费| 亚洲 欧美 91| 韩国毛片免费| 国产视频在线免费观看| 精品国产一区二区三区久久久狼| 欧美a级成人淫片免费看| 久久国产精品自由自在| 亚洲精品久久久中文字| 国产网站麻豆精品视频| 亚洲 激情| 亚洲精品影院| 九九九在线视频| 欧美1区| 国产亚洲精品aaa大片| 久久99爰这里有精品国产| 国产伦久视频免费观看 视频| 日本免费区| 999久久狠狠免费精品| 亚洲第一色在线| 欧美一级视频免费观看| 天天做日日干| 麻豆午夜视频| 精品在线观看国产| 黄视频网站在线看| 久久精品店| 久草免费在线色站| 91麻豆国产级在线| 97视频免费在线| 四虎精品在线观看| 天天色色网| 免费一级片在线观看| 青草国产在线| 国产欧美精品| 亚洲爆爽| 日韩av成人| 国产激情视频在线观看| 日本特黄特色aa大片免费| 国产麻豆精品hdvideoss| 91麻豆国产级在线| 国产高清在线精品一区a| 91麻豆精品国产自产在线观看一区| 国产综合91天堂亚洲国产| 日韩av成人| 欧美一级视频免费观看| 精品久久久久久影院免费| a级黄色毛片免费播放视频 | 久草免费在线观看| 国产极品白嫩美女在线观看看| 欧美激情一区二区三区在线播放| a级毛片免费观看网站| 天天色色色| 你懂的在线观看视频| 国产成人精品一区二区视频| 天天做人人爱夜夜爽2020毛片| 91麻豆精品国产综合久久久| 久久国产精品自由自在| 99热热久久| 深夜做爰性大片中文| 韩国三级视频在线观看| 日韩av成人| 欧美大片a一级毛片视频| 高清一级片| a级毛片免费全部播放| 亚洲天堂一区二区三区四区| 91麻豆爱豆果冻天美星空| 欧美大片a一级毛片视频| 一级毛片视频在线观看| 日本特黄特黄aaaaa大片| 久久福利影视| 色综合久久天天综合绕观看| 午夜精品国产自在现线拍| 国产麻豆精品视频| 成人高清免费| 国产不卡在线播放| 日本特黄一级| 韩国三级香港三级日本三级| 亚洲精品影院久久久久久| 国产激情一区二区三区| 黄色免费三级| 日韩欧美一二三区| 亚洲精品中文一区不卡| 99热精品一区| 国产精品1024永久免费视频| 欧美激情一区二区三区中文字幕| 天堂网中文字幕| 日本在线www| 天堂网中文字幕| 日韩一级黄色| 四虎影视精品永久免费网站| 国产高清在线精品一区二区| 国产网站在线| 精品国产一区二区三区精东影业| 日韩免费在线视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 四虎精品在线观看| 午夜久久网| 国产91精品一区二区| 欧美激情一区二区三区视频高清| 亚洲天堂一区二区三区四区| 可以免费看污视频的网站| 天天做日日爱夜夜爽| 亚洲www美色| 999久久66久6只有精品|