成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Laravel中優(yōu)雅的驗證日期需要大于今天

summerpxy / 2258人閱讀

摘要:我們有時會碰到一個場景,比如買車票,需要進(jìn)行查詢車票剩余,這時候需要一個日期范圍,開始日期必須大于等于今天,結(jié)束日期必須大于等于開始日期。通過增加一個額外的字段,然后通過這個字段限制范圍。測試發(fā)現(xiàn)實際并不生效。

我們有時會碰到一個場景,比如買車票,需要進(jìn)行查詢車票剩余,這時候需要一個日期范圍,開始日期必須大于等于今天,結(jié)束日期必須大于等于開始日期。

Version

Laravel 5.5.40

PHP 7.1


開始之前,為方便查看結(jié)果,在/Exceptions/Handler.php文件捕獲了異常

那么我們開始做一個驗證吧:

新建一個request并注入到需要驗證控制器的方法

下圖圈出的紅色部分,需改成return true因為我們身份驗證一般不在這里驗證

如上圖,end_date可以很簡單的通過start_date來限制時間范圍,那么start_date該怎么驗證呢?我本來想的是這樣的。

通過增加一個額外的字段curr_date,然后start_date通過這個字段限制范圍。測試發(fā)現(xiàn)實際并不生效。直接進(jìn)入了控制器打印的數(shù)據(jù)

調(diào)試了一下,我在IlluminateValidationConcerns、ValidatesAttributes::validateAfterOrEqual方法跳到compareDates方法,并嘗試打印了$this->getValue($parameters[0])這時候的$paramters[0]curr_date總是null


然后查閱了一下源碼,知道了原因,直接說能正確驗證的方法,再說詳細(xì)的過程。

正確的方法是這樣的

重寫父類的prepareForValidation方法,之后再測試

這時候得到想要的驗證了


分析一下過程

能通過依賴注入實例化我們想要的對象,這一切都得感謝LaravelIoC容器

容器每次解析完新對象之后,總是會釋放一些綁定的事件

這些事件很多都是通過服務(wù)提供者來綁定的,我們直接查看config/app.php里有關(guān)表單驗證的服務(wù)提供者



我們可以看到當(dāng)實現(xiàn)ValidatesWhenResolved對象的類在解析之后會自動調(diào)用validate方法

回到新建的IndexTicketRequest類,沒有這個方法,去到父類,發(fā)現(xiàn)實現(xiàn)了ValidatesWhenResolved,而validate是在traitValidatesWhenResolvedTrait

這個類找到了答案,在validate方法里分三步主要的

$this->prepareForValidation() 在驗證之前的準(zhǔn)備

新建一個驗證實例

開始驗證

之所以是需要在驗證之前設(shè)置curr_date,我們來看看新建驗證實例便知道答案


這里有一個地方導(dǎo)致我們的問題出現(xiàn),就是先調(diào)用了$this->validationData()方法拿到request的數(shù)據(jù),然后再通過$this->container->call([$this, "rules"])拿到驗證規(guī)則,所以我們在rules方法寫的自然不生效了,之后的驗證便無法繼續(xù)進(jìn)行

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/30893.html

相關(guān)文章

  • Laravel 用戶多字段認(rèn)證優(yōu)雅解決方案

    摘要:弊端顯而易見,如果另一個不是就抓瞎了,下面是另一種通用的解決方案在中重寫方法假設(shè)字段是假設(shè)字段是假設(shè)字段是可以看到雖然能解決問題,但是顯然有悖于的優(yōu)雅風(fēng)格,賣了這么多關(guān)子,下面跟大家分享一下我的解決方案。 解決方案: 登錄字段不超過兩個的(簡單的解決方案) 登錄字段大于或等于三個的(相對復(fù)雜一些) 登錄字段不超過兩個的 我在網(wǎng)上看到一種相對簡單解決方案,但是不能解決所有兩個字段的驗...

    jk_v1 評論0 收藏0
  • WebGeeker-Validation: 一個強大 PHP 參數(shù)驗證

    摘要:用于對接口的請求參數(shù)進(jìn)行合法性檢查。唯一不符合這一規(guī)則的是字符串型驗證器,它們一部分以開頭的,但也有一部分不以開頭,比如等。驗證型參數(shù)型驗證器只有兩個合法的取值為字符串忽略大小寫。合法的取值為字符串忽略大小寫例完整的型驗證器的列表參考附錄。 用于對API接口的請求參數(shù)進(jìn)行合法性檢查。 在實現(xiàn)服務(wù)端的API接口時,對于每一個接口的每一個參數(shù),都應(yīng)該檢測其取值是否合法,以免錯誤的數(shù)據(jù)輸入到...

    zzzmh 評論0 收藏0
  • 【日常手記】之Laravel5.3

    摘要:個人網(wǎng)站最近剛寫了一個手機(jī)在線播放的電影站使用日常手記更新使用的的查詢作用域的本地作用域去自定義可復(fù)用的約束集合,方便鏈?zhǔn)秸{(diào)用什么是本地查詢作用域本地作用域允許我們定義通用的約束集合以便在應(yīng)用中復(fù)用。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:...

    kidsamong 評論0 收藏0
  • laravel優(yōu)雅分表關(guān)聯(lián)查詢(性能較好,SQL數(shù)量=表數(shù)量,涵蓋了較多laravel手冊推

    摘要:最優(yōu)就只能是查詢表的數(shù)量才算是比較合理,完全有足夠的能力寫出優(yōu)雅的代碼很多人可能會想到的原生查詢了么。但是有強大的關(guān)聯(lián),訪問器修改,查詢范圍等等這些功能讓你的代碼非常簡潔。相信熟悉的人已經(jīng)知道怎么查詢了,可以達(dá)到最優(yōu)化的,和最優(yōu)雅的寫法。 終于被產(chǎn)品的各種刁鉆不合常理的需求磨煉出用laravel寫出較為優(yōu)雅的代碼,在這里給大家分享一下。 先簡單介紹一下基本環(huán)境,我們是做一款直播APP的...

    mylxsw 評論0 收藏0
  • Laravel 和 Spring Boot 兩個框架比較創(chuàng)業(yè)篇(一:開發(fā)效率)

    摘要:小紅要以最低成本最快速度推出版本,投放市場,收集反饋,持續(xù)迭代。總結(jié)在技能掌握充足的情況下,個人感覺開發(fā)效率要略高于。 我個人是比較不喜歡去正兒八經(jīng)的比較兩個框架的,這樣沒有意義,不過欲善其事先利其器! 技術(shù)是相通的,但是在某個特定的領(lǐng)域的某個階段肯定有相對最適合的一個工具! 這里比較不是從技術(shù)角度比較,而是從公司技術(shù)選型考慮的,特別是初創(chuàng)的互聯(lián)網(wǎng)創(chuàng)業(yè)公司。沒辦法,誰讓互聯(lián)網(wǎng)公司離不開...

    tinna 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<