2012-05-29 27 views
5

我是用Symphony2進行Web開發的新手(儘管對於Web開發絕對不是新鮮事),而我即將開始一箇中型項目,該項目將以捆綁方式切片,因爲應用程序的每個安裝可能具有不同的可用功能設置。Symfony 2 - 從可用包中生成菜單條目

我想從可用包中動態生成導航,例如,如果包「foo」處於活動狀態,則應顯示帶有到foo主控制器操作路由的菜單項。

通常情況下,我認爲這將創建一個單獨的地方,然後我會在一個bundle的load()函數中填充,在渲染期間,我會輸出單例。

但symfony2在這部分提供了很大的靈活性,所以我目前正在評估是否有更好的方法。

服務可以成爲一種方式嗎?或事件?或者是依賴注入的東西,所以bundle在構建時會得到一個NavigationConfigurationElement的實例?

對此的任何輸入或想法,或者可能是一些示例如何做到這一點的鏈接,將不勝感激。

最好的問候, 延

回答

6

我的事的最好辦法,就是用注射的依賴標籤。你將不得不創建一個依賴注入擴展,並提供一個「標籤」,這些標籤可以被各種bundle使用來註冊他們的菜單條目。

我不會在這裏描述你的整個過程,因爲在互聯網上有大量的資源。

,但給你做什麼

  1. 實現服務拿着菜單項(單身,你在那裏談)通過實施編譯通
  2. 處理的變量,這個編譯器的快速輪廓通將尋找標記與導航類的所有服務,並與菜單服務
  3. 註冊他們將創建使用該服務來檢索菜單,並使其使用該標籤
  4. 寫束,並提供菜單項的樹枝功能

這裏有一些資源,可以幫助你:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

我目前正在實施爲symfony1.2使用DI標籤以及一個Solr的包。我有一個名爲IndexManager的類,它管理來自不同bundle的各種solr索引。我使用DI標籤,所以其他包可以註冊他們想要在索引中索引的內容/實體。原理與菜單項相同。

在這裏看到:https://github.com/roomthirteen/Room13SolrBundle

重要的文件是:

加入編譯過程:https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php 編譯過程本身:https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass.php

希望幫助。還有什麼問題?不要猶豫,問。

+0

這聽起來很有趣,可能是最symfony'ish的做法。我會檢查它並嘗試它,如果它像我想象的那樣工作,請回復你。 非常感謝您的意見! – jhoffrichter

+0

沒有問題。如果你的事情這個答案是正確的,請舉出它;) – room13

+0

只要我評估它,我會:) – jhoffrichter