天天看點

雲客Drupal源碼分析之資料驗證Validation

各位《雲客drupal源碼分析》系列的讀者:

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

我是雲客,【雲遊天下,做客四方】,聯系方式見首頁,歡迎轉載,但須注明出處

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

前言:

drupal8的驗證元件是基于symfony驗證器元件的,為此本系列專門寫了篇教程來獨立介紹symfony的驗證器validator,在看本篇前務必先閱讀那篇教程,目前drupal8使用的symfony/validator為2.8版本,該教程以3.2版本做介紹,但不必擔心,2.8版本和3.2版本相比變化不大,基本相同,為向前考慮作此安排,排除了許多棄用功能對學習者的影響,該教程可算是本篇的上篇,本篇不再對基本概念做介紹,僅介紹drupal8對symfony驗證器validator的改動和運用。

drupal8驗證器概述:

   如果你認真學習了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檔案夾中統一提供了一下幾個部件:

限制管理器:

限制驗證器工廠:

翻譯器:

類型化資料驗證:

自定義限制:

繼續閱讀