1. 程式人生 > >雲客Drupal8原始碼分析之資料驗證Validation

雲客Drupal8原始碼分析之資料驗證Validation

各位《雲客drupal8原始碼分析》系列的讀者:
本系列一直以每週一篇的速度進行部落格原創更新,希望幫助大家理解drupal8底層原理,並縮短學習時間,但自《外掛系統(上)》主題開始部落格僅釋出前言和目錄,這是因為雲客在思考一個問題:drupal在國外如此流行但在國內卻很小眾,一個重要原因應該是中文資料的缺乏,我們是否能夠找到一種方式來激發中文資料的出產?此時同是積極推動者的晴空提出能否用付費閱讀的方式來鼓勵更多作者?並建立了一個付費閱讀drupal資料的網站,個人覺得也許這能激發高質量原創內容的出產,學習者支付很少費用可以節省大量學習時間是划算的,作者也能分配精力去開發高質量內容而得到報酬,drupal普及開了對大家都有益處,為了支援晴空的這個專案,雲客決定將從《外掛系統(上)》主題開始後續內容全部放在這個網站上收費閱讀,讀者只需要付很少費用即可,雲客在這裡承諾該系列得到的所有訂閱費用全部捐獻給drupal深圳社群,用以組織活動等等,發展社群需要大家貢獻力量,該網站已於2017年3月29日上線,請移步:

http://nowicode.com/ 閱讀本篇完整版

我是雲客,【雲遊天下,做客四方】,微信號:php-world,歡迎轉載,但須註明出處,討論請加qq群203286137

****************************************以下為前言和目錄,請移步:http://nowicode.com/ 閱讀本篇完整版*******************************

前言:

drupal8的驗證元件是基於symfony驗證器元件的,為此本系列專門寫了篇教程來獨立介紹symfony的驗證器validator,在看本篇前務必先閱讀那篇教程,目前drupal8使用的symfony/validator

為2.8版本,該教程以3.2版本做介紹,但不必擔心,2.8版本和3.2版本相比變化不大,基本相同,為向前考慮作此安排,排除了許多棄用功能對學習者的影響,該教程可算是本篇的上篇,本篇不再對基本概念做介紹,僅介紹drupal8對symfony驗證器validator的改動和運用。

   如果你認真學習了symfony驗證器,瞭解了它所有的執行細節,那麼回過頭來看drupal8驗證器會覺得異常輕鬆,因為D8驗證器是基於symfony/validator的,但卻刪減了許多的內容,複雜度大大降低,symfony作為框架理應考慮到可能的各種需求,所以提供的非常全面,但drupal作為具體的應用方,只會根據自己具體的需要來使用,對於刪減也就不足為奇了,在drupal8自己的驗證器元件中沒有了級聯、遍歷、驗證組、物件初始化

這些概念,被驗證的物件往往是型別化資料,約束也不是靠載入器從配置源中載入,而是使用drupal的外掛機制尋找定義在型別化資料上面的約束,這使得驗證器元件和型別化資料元件結合的非常緊密。

   驗證器元件在實體、檔案、聚合器、評論、論壇、連結、使用者、測試等等模組中都有應用,雖然drupal8對symfony驗證器進行了大量刪減,但只要你願意,仍然可以在模組中直接使用symfony驗證器,因為drupal的類載入器完全可以載入symfony驗證器的檔案,從而像獨立使用它一樣,在驗證一些標量資料時這很方便。

(作者注意到網上有一張圖是講解drupal8是如何基於symfony元件的,裡面將drupal8元件分為三類並使用顏色標識,一類是drupal8專有(自己開發的),一類是對symfony進行修改後使用的,最後一類是完全使用symfony的元件,其中就將驗證器元件歸為完全使用symfony的,作者這裡想說drupal對symfony的使用並沒有那麼簡單,許多都是經過繼承而修改的,該圖價值不大,不必太過在意)

drupal8驗證器:

驗證器元件的程式碼並不集中,而是分散在多個模組中,在\core\lib\Drupal\Core\Validation資料夾中統一提供了一下幾個部件:

約束管理器:

約束驗證器工廠:

翻譯器:

型別化資料驗證:

自定義約束: