成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑

關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑

熱門標(biāo)簽:天潤融通外呼系統(tǒng)好嗎 欣思維地圖標(biāo)注 杭州語音電銷機(jī)器人 泊頭在哪里辦理400電話 電銷機(jī)器人沒有效果怎么樣 江西電銷機(jī)器人收費(fèi) 高德地圖標(biāo)注位置怎么標(biāo)注 高德地圖標(biāo)注店鋪收費(fèi)嗎 江門回?fù)芡夂粝到y(tǒng)

驗(yàn)證器怎么創(chuàng)建的,誰創(chuàng)建的

Laravel 文檔調(diào)用驗(yàn)證器,除了通過控制器,還有就是通過Facades的方式創(chuàng)建驗(yàn)證器對象。Validator::make($data,$rule,$message)。

config/app.php 中注冊了'Validator' => Illuminate\Support\Facades\Validator::class。

?php

namespace Illuminate\Support\Facades;

/**
 * @see \Illuminate\Validation\Factory
 */
class Validator extends Facade
{
  /**
   * Get the registered name of the component.
   *
   * @return string
   */
  protected static function getFacadeAccessor()
  {
    return 'validator';
  }
}

從上面可以看出,Validator的實(shí)際實(shí)現(xiàn)類是容器中的validator對象,那這個validator對象是哪個?

?php

namespace Illuminate\Foundation;
...
class Application extends Container implements ApplicationContract, HttpKernelInterface
{
  ...
  public function registerCoreContainerAliases()
  {
    foreach ([
      ...
      'validator'=> [
        \Illuminate\Validation\Factory::class,
        \Illuminate\Contracts\Validation\Factory::class
      ],
    ])
    ...
  }
  ...
}

可以看出,最終創(chuàng)建驗(yàn)證器是通過實(shí)現(xiàn)\Illuminate\Contracts\Validation\Factory接口的\Illuminate\Validation\Factory類創(chuàng)建的。再來看看,這個工廠類怎么創(chuàng)建實(shí)際的驗(yàn)證器的。

//\Illuminate\Contracts\Validation\Factory 源碼

protected function resolve(array $data, array $rules, array $messages, array $customAttributes)
{
  if (is_null($this->resolver)) {
    return new Validator(
      $this->translator,
      $data,
      $rules,
      $messages,
      $customAttributes
    );
  }

  return call_user_func(
    $this->resolver,
    $this->translator,
    $data,
    $rules,
    $messages,
    $customAttributes
  );
}

到這里,可以看出Laravel的驗(yàn)證器的創(chuàng)建都是通過特定的工廠類創(chuàng)建。

如果需要自定義驗(yàn)證器類(比如我需要把5.8的一些新功能遷移到5.5的版本上),有兩種方式:

一,創(chuàng)建一個自定義的工廠類。然后在AppServiceProvider中重新綁定新的驗(yàn)證器工廠創(chuàng)建類;

二,AppServiceProvider中通過resolver方法設(shè)置工廠類的resolver屬性,接管驗(yàn)證器的實(shí)例化,例如:

Validator::resolver(function($translator, $data, $rules, $messages, $customAttributes){
  return new ExtendValidator($translator, $data, $rules, $messages, $customAttributes);
});

如何自定義驗(yàn)證規(guī)則

Laravel本身提供了很多通用的參數(shù)驗(yàn)證規(guī)則,但是對于一些特定的場景,還是需要提供驗(yàn)證規(guī)則的擴(kuò)展。

Laravel驗(yàn)證規(guī)則的擴(kuò)展有兩種方式。

1 通過extend方法擴(kuò)展

//這是一個簡單的參數(shù)比較的驗(yàn)證規(guī)則,Laravel5.8中提供,Laravel5.5中未提供
//驗(yàn)證規(guī)則如下: 'max_num'=>'gte:min',
Validator::extend('gte',function($attribute, $value, $parameters, $validator){
  if($value>=data_get($validator->getData(),$parameters[0]))
  {
    return true;
  }
  return false;
});
//\Illuminate\Contracts\Validation\Factory 源碼
public function extend($rule, $extension, $message = null)
{
  $this->extensions[$rule] = $extension;

  if ($message) {
    $this->fallbackMessages[Str::snake($rule)] = $message;
  }
}
//\Illuminate\Validation\Validator 源碼
protected function callExtension($rule, $parameters)
{
  $callback = $this->extensions[$rule];

  if (is_callable($callback)) {
    return call_user_func_array($callback, $parameters);
  } elseif (is_string($callback)) {
    return $this->callClassBasedExtension($callback, $parameters);
  }
}

protected function validateAttribute($attribute, $rule)
{
  ...
  $method = "validate{$rule}";
  if ($validatable  ! $this->$method($attribute, $value, $parameters, $this)) {
    $this->addFailure($attribute, $rule, $parameters);
  }
}

public function __call($method, $parameters)
{
  $rule = Str::snake(substr($method, 8));

  if (isset($this->extensions[$rule])) {
    return $this->callExtension($rule, $parameters);
  }

  throw new BadMethodCallException(sprintf(
    'Method %s::%s does not exist.', static::class, $method
  ));
}

Factory提供了extend方法用于擴(kuò)展規(guī)則驗(yàn)證方法。所有的擴(kuò)展規(guī)則最終都會被傳到驗(yàn)證器中。驗(yàn)證器在驗(yàn)證參數(shù)的過程中,如果找到匹配的驗(yàn)證規(guī)則,則直接進(jìn)行驗(yàn)證。否則調(diào)用魔術(shù)方法__call查找擴(kuò)展驗(yàn)證函數(shù)。擴(kuò)展函數(shù)返回布爾值,返回true則表示驗(yàn)證通過,返回false表示驗(yàn)證失敗。

2 通過自定義規(guī)則類擴(kuò)展

Laravel 中提供了Illuminate\Contracts\Validation\Rule接口,只有實(shí)現(xiàn)了這個接口的類都認(rèn)為是符合的自定義驗(yàn)證規(guī)則類。

?php

namespace Illuminate\Contracts\Validation;

interface Rule
{
  /**
   * Determine if the validation rule passes.
   *
   * @param string $attribute
   * @param mixed $value
   * @return bool
   */
  public function passes($attribute, $value);

  /**
   * Get the validation error message.
   *
   * @return string
   */
  public function message();
}

自定義規(guī)則類需要實(shí)現(xiàn)的方法有passes方法,用于驗(yàn)證參數(shù)是否合法。message方法,用于提供驗(yàn)證失敗的錯誤提示信息。

使用自定義驗(yàn)證類,相對于extend方法擴(kuò)展有一個很大的bug就是無法在自定義類中獲取到當(dāng)期的驗(yàn)證器對象。從而導(dǎo)致在當(dāng)前擴(kuò)展的驗(yàn)證規(guī)則中,只能過獲取到需要驗(yàn)證的數(shù)據(jù),而獲取不到其他的字段數(shù)據(jù),無法進(jìn)行聯(lián)合字段的驗(yàn)證。像上面比較兩個字段的大小的驗(yàn)證規(guī)則就無法實(shí)現(xiàn)。

如果想要通過自定義驗(yàn)證規(guī)則類實(shí)現(xiàn)上面兩個字段大小比較的驗(yàn)證規(guī)則,則需要自定義驗(yàn)證類,修改validateUsingCustomRule方法,將當(dāng)期驗(yàn)證器傳入到自定義驗(yàn)證規(guī)則實(shí)例對象中去。

protected function validateUsingCustomRule($attribute, $value, $rule)
{
  if(method_exists($rule, 'setValidator'))
  {
    $rule->setValidator($this);
  }
  return parent::validateUsingCustomRule($attribute,$value,$rule);
}

如何實(shí)現(xiàn)用當(dāng)期類方法作為驗(yàn)證規(guī)則驗(yàn)證函數(shù)

像Yii2中,因?yàn)榛旧纤械膶ο蠖加序?yàn)證方法,所以很容易用當(dāng)期類方法作為驗(yàn)證規(guī)則驗(yàn)證函數(shù)。

例如,一個驗(yàn)證規(guī)則如下,表示用當(dāng)期類的validateMinNum對參數(shù)進(jìn)行驗(yàn)證,那么,這樣的一個功能,如何在Laravel中實(shí)現(xiàn)呢。

['min_num'=>'validateMinNum']

方法1 通過自定義類實(shí)現(xiàn) Laravel提供了ClosureValidationRule自定義驗(yàn)證類,用來添加回調(diào)函數(shù)的驗(yàn)證。

例如

$rule = [
  'min'=>new ClosureValidationRule([$this,'checkv'])
];
$data = ['min'=>10];
$v = Validator::make($data,$rule);

方法2 通過extend方式實(shí)現(xiàn)

$rule = [
  'min'=>'checkv'
];
Validator::extend('checkv',[$this,'checkv']);

但是這種方式對驗(yàn)證器的影響是全局的。不建議使用。

總結(jié)

通過以上源碼的學(xué)習(xí),可以看出Laravel驗(yàn)證器的創(chuàng)建都是用過驗(yàn)證器工廠類創(chuàng)建的。如果需要自定義驗(yàn)證器,可以通過修改驗(yàn)證器工廠類,或者設(shè)置驗(yàn)證器工廠類的resolver屬性接管驗(yàn)證器的實(shí)例化。

驗(yàn)證規(guī)則的擴(kuò)展有兩種方式,一種是通過extend方式實(shí)現(xiàn)。extend方式對驗(yàn)證器的影響是全局的,整個運(yùn)行進(jìn)程有效??梢垣@取到驗(yàn)證器本身,因此可以做多個字段關(guān)系的驗(yàn)證;另一種是通過自定義規(guī)則類實(shí)現(xiàn)。自定義規(guī)則了只對使用自定義規(guī)則類的驗(yàn)證有效。但是自定義規(guī)則類本身無法直接獲取到驗(yàn)證器本身,不能夠做多個字段關(guān)系的驗(yàn)證。如果需要實(shí)現(xiàn),則需要使用自定義驗(yàn)證器,將驗(yàn)證器傳入到驗(yàn)證規(guī)則中去。

Laravel本身提供了ClosureValidationRule的驗(yàn)證規(guī)則用于處理回調(diào)函數(shù)驗(yàn)證規(guī)則。同時也可以使用extend方式進(jìn)行回調(diào)函數(shù)的驗(yàn)證。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • Laravel框架表單驗(yàn)證詳解
  • Laravel中使用FormRequest進(jìn)行表單驗(yàn)證方法及問題匯總
  • 在Laravel框架里實(shí)現(xiàn)發(fā)送郵件實(shí)例(郵箱驗(yàn)證)
  • Laravel框架實(shí)現(xiàn)發(fā)送短信驗(yàn)證功能代碼
  • Laravel 5框架學(xué)習(xí)之表單驗(yàn)證
  • Laravel4中的Validator驗(yàn)證擴(kuò)展用法詳解
  • 使用 laravel sms 構(gòu)建短信驗(yàn)證碼發(fā)送校驗(yàn)功能
  • Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化詳解
  • Laravel框架用戶登陸身份驗(yàn)證實(shí)現(xiàn)方法詳解
  • Laravel5.2使用Captcha生成驗(yàn)證碼實(shí)現(xiàn)登錄(session巨坑)

標(biāo)簽:江門 駐馬店 雙鴨山 內(nèi)江 石嘴山 大同 深圳

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑》,本文關(guān)鍵詞  關(guān)于,Laravel,參數(shù),驗(yàn)證,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑》相關(guān)的同類信息!
  • 本頁收集關(guān)于關(guān)于Laravel參數(shù)驗(yàn)證的一些疑與惑的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    777奇米成人网| 日本免费中文字幕在线| 国产精品我不卡| aa视频在线播放| 北条麻妃av毛片免费观看| 九九九九九精品| 日韩精品一区二区三区在线观看| 电影一区二区| 一级毛片视频在线| 国产精品影院在线观看| 欧美日韩一二区| 91亚洲精品在线观看| 国产精品久久久久久av福利软件| 亚洲视频一区二区在线| 精品福利在线看| 妺妺窝人体色www聚色窝仙踪| 久久免费视频网站| 777影院狠狠色| 国产美女视频一区二区二三区| 综合国产在线| 成人豆花视频| 欧美bbbbxxxx| 欧美sm视频| 手机在线观看你懂的| 欧美三片在线视频观看| 岛国最新视频免费在线观看| www欧美成人18+| 欧美一级片免费观看| 久久夜色精品亚洲| 91精品国自产在线观看| 欧美 亚欧 日韩视频在线| 国产精品视频午夜| av一卡二卡| 黄网站色欧美视频| 国产精品第6页| 和岳每晚弄的高潮嗷嗷叫视频| 欧美色欧美亚洲高清在线视频| 精品国产aⅴ麻豆| 成年网站在线免费观看| 国产精品一区二区三区在线播放| 大地资源网3页在线观看| 不卡一区二区中文字幕| 91色综合久久久久婷婷| 中文字幕亚洲在线观看| 美日韩一级片在线观看| 久草.com| 顶级嫩模精品视频在线看| 中文字幕在线看片| 国产女主播在线| 青草视频在线观看免费| 在线精品国产亚洲| 日韩在线视频免费观看高清中文| 一级片视频免费观看| 国产精品一区二区人妻喷水| 超碰在线资源| 奇米精品在线| 国产精品无圣光一区二区| 久草在线网址| 国产18精品乱码免费看| 国产精品88a∨| 午夜免费激情视频| 亚洲国产综合人成综合网站| 国产欧美一区二区在线播放| 亚洲三级免费看| 日韩一二三在线视频播| 欧美日韩一级二级三级| 国产精品网站导航| 久久精品网站免费观看| 先锋资源男人站| 精品国产一区二区三区麻豆小说| 日韩精品视频一二三| 色欲av永久无码精品无码蜜桃| 久久精品国产一区二区| 欧美色图一区| 一本色道久久加勒比精品| 啊啊啊国产视频| 欧美日韩一区在线视频| 精品国产一区二区三区不卡蜜臂| 偷拍自拍在线看| 国产午夜精品久久久| 欧美成人福利| 无码人妻精品一区二区三区在线| 川上优av中文字幕一区二区| 一级少妇精品久久久久久久| 风流老熟女一区二区三区| www成人在线视频| 欧美视频精品一区| 在线免费观看黄色网址| 国产三级一区二区三区| 欧美午夜久久久| 亚洲最新av在线| 亚洲国产日韩精品| 国产美女91呻吟求| 制服丝袜影音先锋| 天堂一区二区三区四区| 精品国产户外野外| 丰满大乳奶做爰ⅹxx视频| 精品一区二区三区四| 国产精品久久久久久久久免费桃花| 艳妇乳肉豪妇荡乳av| 欧美亚洲一区二区在线观看| 国内精品视频一区| 一级黄色录像免费看| 在线国产99| 亚洲国产精品久久久久婷婷软件| japan高清日本乱xxxxx| 亚洲欧美综合乱码精品成人网| 欧美成人精品一区二区男人看| 9色porny自拍视频一区二区| 香蕉视频在线观看免费| 韩国久久久久久| 无码人妻丰满熟妇区bbbbxxxx| 免费成人深夜夜行网站| 欧美人体一区二区三区| 天堂电影在线| 国产精品视频一区二区图片| 日本欧美国产| 婷婷久久一区| 欧美另类在线播放| 女人18毛片水真多免费播放| 欧美独立站高清久久| 成人黄色片在线| 一区二区激情小说| 自拍偷拍欧美日韩| 亚洲二区av| 成人性生交大片免费看在线播放| 久草免费新视频| 亚洲国产欧美一区| 蜜臀久久99精品久久一区二区| 久久久久久不卡| 亚洲欧洲视频在线| av大片在线| 蜜臀av性久久久久蜜臀av麻豆| 九九视频直播综合网| 国产精品探花视频| www.性欧美| 99re在线视频播放| 精品国内自产拍在线视频| 亚洲第一福利在线观看| 久久久久久久久久综合| 久久人人97超碰人人澡爱香蕉| 日韩国产在线观看| 九九色在线视频| 欧美猛男超大videosgay| 国产一区一区| 丁香六月色婷婷| 国产精品手机在线| 艳妇乳肉亭妇荡乳av| a级片在线观看免费| 欧美激情精品久久久久久免费印度| 中文在线免费视频| 欧美三根一起进三p| av网站有哪些| 久久久亚洲国产| **网站欧美大片在线观看| 激情综合电影网| 日韩深夜影院| 极品少妇一区二区三区精品视频| 粗大的内捧猛烈进出在线视频| 成视频在线观看免费观看| 久久天天久久| 亚洲第一综合色| 久久亚洲私人国产精品va媚药| 诱人的瑜伽老师3hd中字| 亚洲欧美在线综合| 亚洲午夜精品一区| 国产精品久久..4399| 中文字幕亚洲乱码| 亚洲综合欧美激情| 亚洲国产岛国毛片在线| 亚洲精品久久久久久一区二区| 精品国产鲁一鲁一区二区三区| 久热精品视频在线观看一区| 精品久久久香蕉免费精品视频| 国产农村妇女毛片精品久久| 成片免费观看视频| 午夜影院欧美| 婷婷丁香一区二区三区| xfplay爱情电影网love| 黄色一级免费| 美国黑人一级大黄| 色狠狠一区二区三区香蕉| 日韩欧美亚洲一区二区| 精品国产91乱高清在线观看| а中文在线天堂| 国产精彩视频在线| 欧美日韩卡一卡二| 一区二区电影在线观看| 国产一级片在线播放| 绯色av蜜臀vs少妇| 欧美日韩精品一区二区三区在线观看| 人妻熟人中文字幕一区二区| 中文在线综合| 亚洲日本精品国产第一区| 久久精品免费网站| 欧美日韩国产小视频在线观看| 5g影院天天爽成人免费下载| 妞干网免费在线视频| 在线观看免费91| 国产女人高潮时对白| 佐山爱在线视频| 成人网欧美在线视频| 亚洲av片不卡无码久久| 久久久久午夜电影| 好男人www社区| av在线看网址| 亚洲欧洲精品一区二区| 色天使色偷偷av一区二区| av在线下载| 国产精品麻豆免费版| 国产在线视频二区| 欧美日韩一区自拍| 免费在线成人av| 精品国产无码一区二区三区| 午夜亚洲影视| 欧美巨猛xxxx猛交黑人97人| 综合国产精品| 被陌生人带去卫生间啪到腿软| 日韩亚洲欧美中文在线| 最新亚洲精品国自产在线观看| 久久国产柳州莫菁门| 在线欧美激情| 色婷婷久久av| 污视频网站免费观看| 亚洲精品久久在线| 亚洲精品一区二区精华| 综合网五月天| 久久99精品国产99久久6尤物| 精品国产精品一区二区夜夜嗨| 成人不卡视频| 国产精品久久久久久妇女6080| 亚洲视频狠狠| 狠狠做深爱婷婷综合一区| 国产精品久久久久久久一区探花| 国产精品吊钟奶在线| avtt天堂资源网站| 中国人与牲禽动交精品| 黄色录像免费观看| 毛片在线导航| 91丨九色丨国产丨porny| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 国产日本韩国在线播放| 日韩av观看网址| 90岁老太婆乱淫| 成人激情视频网| 黄色片视频网站| 久久精品国产sm调教网站演员| 欧美一级特黄aaaaaa大片在线观看| 欧美亚男人的天堂| 日本午夜在线观看| 日本视频免费一区| 国产精品伦理| 情事1991在线| 国产精品一二| 波多野结衣中文字幕一区| 无人日本免费视频| 久久99国产精品久久99| 免费在线午夜视频| 国内精品久久久久久久久电影网| 国产成人l区| av在线小说| 91免费版在线观看| 爱情岛论坛亚洲品质自拍视频网站| 久久国产波多野结衣| 大香伊人中文字幕精品| 正义之心1992免费观看全集完整版| 久久伊人色综合| 日本一区二区三区在线观看| 成人综合av网| 91麻豆精品国产综合久久久久久| 91精品国偷自产在线电影| 中文字幕免费高清| eeuss鲁一区二区三区| 天天撸天天射| 国产综合久久久久影院| 欧洲一区二区在线| 男人添女人下部高潮视频在观看| 亚洲专区中文字幕| eeuss国产一区二区三区四区| 变态另类ts人妖一区二区| 男人免费av| 色综合97天天综合网| 91福利视频在线观看| 亚洲精品aⅴ中文字幕乱码| 亚洲AV成人无码网站天堂久久| 日本一区视频| av亚洲产国偷v产偷v自拍| 亚洲国产精品国自产拍av秋霞| 亚洲成年人视频| 日韩少妇与小伙激情| 成人黄色综合网站| 国产三级理论片| 日韩国产欧美精品一区二区三区| 日韩色视频在线观看| 成人福利电影精品一区二区在线观看| 午夜视黄欧洲亚洲| 中文字幕av一区二区三区谷原希美| 国产高清久久久久| 91精品国产精品| 欧美一区二区三区视频在线观看| 免费视频一区三区| 精品少妇人妻av一区二区三区| 亚洲亚洲免费| 免费在线毛片网站| 国产精品一区二区三区美女| 美女精品视频一区| 日本一二三区在线观看| 日韩激情一区| 在线视频您懂的| 国产裸体无遮挡| 日本不卡在线观看| 一区二区三区国产在线| 依依成人综合视频| jlzzjlzz欧美大全| 欧美一级成年大片在线观看| 91成人国产综合久久精品| 野外性xxxxfreexxxxx欧美| 亚洲精品免费一二三区| 番号在线播放| 日韩av在线免费| 成年女人在线视频| 日韩欧美国产成人| 岛国片在线看| 精品盗摄一区二区三区| bbbbbbbbbbb在线视频| 久久97精品久久久久久久不卡| 国产一区二区三区不卡在线| 日韩一级视频|