我正在開發一個Symfony項目(我的第一個),我必須從我的Widget
類中檢索一組屬於Page
的小部件。但是,在返回結果之前,我需要驗證 - 對於外部服務 - 用戶有權查看每個小部件。如果沒有,當然,我需要從結果集中刪除小部件。Symfony模型回調等效
使用CakePHP或Rails,我會使用回調,但我沒有發現任何類似的Symfony。我看到事件,但如果我正確地閱讀東西(這總是需要討論),那些與控制器/動作看起來更相關。我的回退解決方案是覆蓋WidgetPeer
類中的各種檢索方法,並通過自定義方法轉移它們,該方法執行授權並適當修改結果集。不過,這感覺像是大規模的矯枉過正,因爲我必須每選擇方法覆蓋以確保授權在未來的開發人員不必考慮的情況下完成。
看起來行爲可能對此很有用(尤其是因爲它可能是,我可能需要在未來授權其他類實例),但我找不到任何體面的文檔來進行合格評估。
我錯過了什麼嗎?似乎必須有更好的方式,但我還沒有找到。
這是_always_部分,它比單個高級方法中的操作更尖叫。我在Symfony行爲中看到了令人沮喪的少量文檔,並且它似乎都是以1.2爲中心的。我正在使用1.4.1。行爲機制自1.2以來發生了變化嗎?謝謝你的幫助。 – 2010-01-12 20:19:59
行爲實際上可能不是您的解決方案,您是否想要對更多對象執行此「可查看」檢查而不僅僅是您的Page Widgets?如果沒有,那麼在你的模型中的直接覆蓋將會很好,不用擔心創建整個行爲。 Rails/Cake鉤子的工作方式與行爲和方法覆蓋的方式完全相同,唯一真正的區別是您使用pre *和post *方法構建的乾淨的代碼分離。然而,Symfony確實可以讓你完全覆蓋所有的東西。 希望有所幫助。 – nortron 2010-01-12 21:58:54
這確實有幫助。我喜歡回調的封裝,但嘗試過和真正的面向對象覆蓋可以完成這項工作。正如我在上面的回答中所提到的那樣,當我想要/需要授權更多隻是'Widget'模型時,我會擔心創建行爲。再次感謝。 – 2010-01-13 12:10:01