有哪些PHP架構使用了traits,它們用traits處理哪些問題?

來源:互聯網
上載者:User

回複內容:

laravel 架構大量使用了traits. 簡單舉幾個例子

在Eloquent中使用了trait 。然後在model初始化的時候,有個boot方法,會自動判斷當前的類用了哪些trait。然後得到一個數組。程式會遍曆這個數組,尋找有沒有符合 "bootTraitName"的方法(在trait中定義),如果有就執行。

Eloquent用這種方法,在初始化一個model的時候,就可以做許多如事件之類的自動載入。在它內建的功能中,softDelete就是這樣做的。簡單來說,use了softDelete的model,會在boot的時候自動執行bootSoftDelete,然後該model所有的查詢都預設加入一個判斷deleted_at 欄位的環節,以只調取未被刪除的資料。

這種做法提供了很多便利(設想載入一個cachable的trait,每次boot的時候,就給model添加一個事件,一旦某條記錄進行了修改,就自動產生一個緩衝)。

trait在laravel的其它情境中也經常使用。例如User模型,是Laravel用來做身分識別驗證的驅動。與身分識別驗證的相關方法就是用一個trait來載入的。還有laravel開箱內建的AuthController,也把找回密碼等功能做成了trait。這樣當我們需要換別的控制器做驗證驅動,只要寫一行use 代碼,就自動得到了相關方法。

laravel使用trait還有一個比較典型的,就是dispatch。主要在laravel的controller中調用了這個trait。這樣laravel的控制器就可以用$this->dispatch() 直接來調度任務。不僅如此,任何一個類只要use了這個DispatchJob的trait,都能用同樣的調度方法(其實就是用app()得到了一個dispatch的單例)

不知道上述回答是否令題主滿意。把traits當model用,不知道有問題沒?
現在還沒這樣做過.
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.