婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)

為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)

熱門標(biāo)簽:南京3D地圖標(biāo)注 南寧電話外呼系統(tǒng)線路 重慶外呼電銷系統(tǒng)多少錢 咸陽電銷 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式 邢臺400電話辦理 辦理400電話哪家好點(diǎn) 正規(guī)電銷機(jī)器人系統(tǒng) 嘟嘟云外呼系統(tǒng)

前言

在我們使用 laravel 框架的驗(yàn)證器,有的時(shí)候需要對表單等進(jìn)行數(shù)據(jù)驗(yàn)證,當(dāng)然 laravel 也為我們提供了
Illuminate\Http\Request 對象提供的 validate 方法 以及 FormRequest 和 Validator。

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

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

開始

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

?php
namespace App\Validate;

use Illuminate\Support\Facades\Validator;
/**
 * 擴(kuò)展驗(yàn)證器
 */
class BaseValidate {

  /**
   * 當(dāng)前驗(yàn)證規(guī)則
   * @var array
   */
  protected $rule = [];

  /**
   * 驗(yàn)證提示信息
   * @var array
   */
  protected $message = [];

  /**
   * 驗(yàn)證場景定義
   * @var array
   */
  protected $scene = [];

  /**
   * 設(shè)置當(dāng)前驗(yàn)證場景
   * @var array
   */
  protected $currentScene = null;

  /**
   * 驗(yàn)證失敗錯(cuò)誤信息
   * @var array
   */
  protected $error = [];

  /**
   * 場景需要驗(yàn)證的規(guī)則
   * @var array
   */
  protected $only = [];


  /**
   * 設(shè)置驗(yàn)證場景
   * @access public
   * @param string $name 場景名
   * @return $this
   */
  public function scene($name)
  {
    // 設(shè)置當(dāng)前場景
    $this->currentScene = $name;

    return $this;
  }

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

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

    //如果場景需要驗(yàn)證的規(guī)則不為空
    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);
    //驗(yàn)證失敗
    if ($validator->fails()) {
      $this->error = $validator->errors()->first();
      return false;
    }

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

  /**
   * 獲取數(shù)據(jù)驗(yàn)證的場景
   * @access protected
   * @param string $scene 驗(yàn)證場景
   * @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;
    }
    // 如果設(shè)置了驗(yàn)證適用場景
    $scene = $this->scene[$scene];
    if (is_string($scene)) {
      $scene = explode(',', $scene);
    }
    //將場景需要驗(yàn)證的字段填充入only
    $this->only = $scene;
    return true;
  }

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

使用

接下來我們來驗(yàn)證一個(gè)文章的提交信息,首先我們新建一個(gè)文章驗(yàn)證類 ArticleValidate.php 并填充一些內(nèi)容

?php
namespace App\Validate;

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

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

如上所示,在這個(gè)類中我們定義了驗(yàn)證規(guī)則 rule,自定義驗(yàn)證信息 message,以及驗(yàn)證場景 scene

非場景驗(yàn)證

我們只需要定義好規(guī)則

public function update(){

    $ArticleValidate = new ArticleValidate;

    $request_data = [
      'id'=>'1',
      'title'=>'我是文章的標(biāo)題',
      'content'=>'我是文章的內(nèi)容',
    ];

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

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

場景驗(yàn)證

我們需要提前在驗(yàn)證類中定義好驗(yàn)證場景

如下,支持使用字符串或數(shù)組,使用字符串時(shí),要驗(yàn)證的字段需用 , 隔開

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

然后在我們的控制器進(jìn)行數(shù)據(jù)驗(yàn)證

public function add(){

    $ArticleValidate = new ArticleValidate;

    $request_data = [
      'title'=>'我是文章的標(biāo)題',
      'content'=>'我是文章的內(nèi)容',
    ];

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

  }

控制器內(nèi)驗(yàn)證

當(dāng)然我們也允許你不創(chuàng)建驗(yàn)證類來驗(yàn)證數(shù)據(jù),

public function add(){

    $Validate = new BaseValidate;

    $request_data = [
      'title'=>'我是文章的標(biāo)題',
      'content'=>'我是文章的內(nèi)容',
    ];

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

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

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

參考文檔

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

到此這篇關(guān)于為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Laravel 驗(yàn)證器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

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

您可能感興趣的文章:
  • Laravel框架表單驗(yàn)證詳解
  • Laravel 5框架學(xué)習(xí)之表單驗(yàn)證
  • 使用 laravel sms 構(gòu)建短信驗(yàn)證碼發(fā)送校驗(yàn)功能
  • Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化詳解
  • Laravel框架用戶登陸身份驗(yàn)證實(shí)現(xiàn)方法詳解
  • Laravel 5.5 的自定義驗(yàn)證對象/類示例代碼詳解
  • laravel中短信發(fā)送驗(yàn)證碼的實(shí)現(xiàn)方法
  • laravel5.4生成驗(yàn)證碼的實(shí)例講解
  • laravel5.4生成驗(yàn)證碼的代碼

標(biāo)簽:河南 隴南 黃山 通遼 武漢 南通 平頂山 唐山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)》,本文關(guān)鍵詞  為,你的,Laravel,驗(yàn)證,器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于為你的 Laravel 驗(yàn)證器加上多驗(yàn)證場景的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人av资源| 国产精品视频在线看| 国产成人精品一区二区三区网站观看 | 日本高清视频一区二区| 精品在线一区二区三区| 亚洲h动漫在线| www成人在线观看| 欧美久久久久免费| 3751色影院一区二区三区| 欧美猛男超大videosgay| 精品一区二区三区欧美| 首页国产欧美久久| 国产视频不卡一区| 中文字幕一区二区三区在线不卡 | 亚洲柠檬福利资源导航| 国产一区二区三区在线观看免费视频 | 亚洲免费在线视频一区 二区| 欧美性猛交xxxxxxxx| 一本到一区二区三区| www.亚洲精品| 欧美三级电影网| 日韩一级大片在线观看| 一区二区三区中文免费| 激情另类小说区图片区视频区| 欧美一区二区三区视频免费| 亚洲一区二区三区四区五区中文 | 五月激情丁香一区二区三区| 五月婷婷久久丁香| 国产网站一区二区三区| 蜜臀久久99精品久久久久宅男| 日本丰满少妇一区二区三区| 欧美午夜一区二区三区| 成人午夜av影视| 欧美aa在线视频| 国产欧美日韩在线视频| 欧美一区二区女人| 欧美日韩精品综合在线| 国产丝袜美腿一区二区三区| 精品视频在线视频| 欧美性高清videossexo| 国产亚洲福利社区一区| 国产喂奶挤奶一区二区三区| 久久久久久麻豆| 日韩一区在线免费观看| 91蜜桃视频在线| 91精品久久久久久久久99蜜臂| 亚洲三级理论片| 在线免费视频一区二区| 成人黄色软件下载| 亚洲精品videosex极品| www.欧美.com| 91浏览器在线视频| 欧美精品一区二区高清在线观看 | 成人av影院在线| 久久久影院官网| 国产精品视频线看| 91浏览器在线视频| 欧美日本在线看| 亚洲国产精品一区二区久久恐怖片| 天天做天天摸天天爽国产一区 | 97久久精品人人爽人人爽蜜臀| 精品少妇一区二区三区视频免付费| 国产精品主播直播| 日韩专区欧美专区| 最新不卡av在线| 亚洲午夜久久久久久久久电影院 | 国产99久久久久| 久草精品在线观看| 国产一区二区三区在线看麻豆| 亚洲视频图片小说| 亚洲自拍另类综合| 久久久久国产精品人| 亚洲国产精品v| 91麻豆高清视频| 欧美丝袜自拍制服另类| 日韩不卡免费视频| 日韩欧美国产一区二区三区 | 午夜不卡av在线| 在线成人小视频| 美女在线视频一区| 国产乱码精品一区二区三| 亚洲国产精品影院| 久久se精品一区精品二区| 亚洲激情男女视频| 午夜精品久久久久久久久久久 | 亚洲v中文字幕| 亚洲午夜久久久久久久久久久| 国产欧美日韩综合精品一区二区| 日韩美女久久久| 精品日产卡一卡二卡麻豆| 欧美日韩成人综合| 欧美日本韩国一区二区三区视频| 成人av在线一区二区| 欧美丰满高潮xxxx喷水动漫| 国产亚洲欧美日韩在线一区| 日韩欧美国产小视频| 久久精品视频一区二区三区| 2023国产精品| 久久精品999| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品福利一区二区| 亚洲午夜激情网页| 综合在线观看色| av亚洲精华国产精华精华| 久久久99久久| 一区二区三区在线免费播放 | 国产99久久久久| 中文字幕亚洲精品在线观看| 亚洲欧美一区二区三区久本道91| 粉嫩蜜臀av国产精品网站| 成人av免费在线| 亚洲免费在线视频| 成人精品免费网站| 国产精品亚洲一区二区三区妖精 | 午夜影院久久久| 日韩专区一卡二卡| 国产精品正在播放| 色综合久久99| 日韩免费看网站| 国产成人亚洲综合色影视| 亚洲色欲色欲www在线观看| 亚洲精品中文字幕乱码三区 | 国产激情一区二区三区四区| 色综合久久综合网97色综合| 狠狠色狠狠色综合日日91app| 日韩免费高清av| 麻豆免费看一区二区三区| 日韩国产欧美在线视频| 久久中文字幕电影| 日韩欧美自拍偷拍| 久久久久亚洲综合| 日本一区二区三区dvd视频在线 | 欧美高清dvd| www.亚洲激情.com| 亚洲影院久久精品| 欧美日韩午夜精品| 欧美日韩免费观看一区二区三区| 色噜噜偷拍精品综合在线| 91黄色在线观看| 亚洲一区二区av电影| 日本一区二区动态图| 成人激情午夜影院| 激情国产一区二区| 3d动漫精品啪啪1区2区免费| 日韩视频不卡中文| 免费高清在线一区| 懂色av一区二区夜夜嗨| 久久久久久久久伊人| 久久精品视频免费| 91日韩一区二区三区| 亚洲一区二区三区激情| 日韩精品国产精品| 亚洲黄色片在线观看| 日韩欧美中文一区| 欧美男人的天堂一二区| 国产精品久久久久久久久快鸭| 色婷婷av一区二区三区gif| 国产精品久久久久一区二区三区| 久久久91精品国产一区二区精品| 91色视频在线| 一本色道综合亚洲| 一区二区三区国产豹纹内裤在线| 91女厕偷拍女厕偷拍高清| 国模冰冰炮一区二区| 久草热8精品视频在线观看| 精品蜜桃在线看| av色综合久久天堂av综合| 欧美视频完全免费看| 亚洲成av人影院在线观看网| 欧美激情中文字幕| 国产成人在线视频播放| 亚洲精品大片www| 欧美男男青年gay1069videost| 偷拍自拍另类欧美| 日韩精品一区二区三区视频播放| 中文字幕免费观看一区| av中文字幕一区| 欧美一区二区视频免费观看| 成人理论电影网| 97久久精品人人做人人爽50路 | 国产亚洲一区二区三区在线观看| 成人黄页毛片网站| 久久久久久久综合色一本| 欧美色图在线观看| 精品福利一区二区三区免费视频| 欧美在线一区二区三区| 香蕉久久夜色精品国产使用方法 | 5858s免费视频成人| 国产成人午夜视频| 91麻豆精品国产91久久久使用方法| 亚洲影视资源网| 色狠狠色噜噜噜综合网| 欧美午夜精品一区二区三区 | 日本欧美肥老太交大片| 91国偷自产一区二区三区观看 | 亚洲欧美日韩国产手机在线| 日韩一区二区电影网| 久久久久久综合| 精品一区二区三区在线观看 | 日韩欧美一级特黄在线播放|