2011-11-13 24 views
1

我想創建一個管理包,它以某種方式檢測其他包並嘗試將它們添加到菜單和相同的RBAC上下文中。如何使用Symfony 2捆綁包設計靈活的管理面板?

例如:

  • AdminBundle限定路線/管理/儀表盤,需要認證和授權。在那裏你可以看到菜單中的3個項目,例如:儀表板,配置(存儲在數據庫中的一些配置)和用戶(用戶的CRUD,在UserBundle中找到)
  • 然後有人添加了一個ProductBundle,電子商務產品什麼的。不知何故,在不修改AdminBundle中的任何代碼的情況下,我們現在有一個新項目「產品」,可在/ admin/dashboard中的菜單中找到。
  • 稍後,不再需要產品CRUD,因此我們只刪除ProductBundle,它會自動從管理控制檯菜單中消失。

你會如何去執行這樣的事情?在symfony 2中有沒有像這樣的插件式設計的本地支持?

回答

5

我不知道一個完整的插件解決方案,但我的做法是:

有一個「主後端」稱之爲MasterAdminBundle談話的緣故。該軟件包包含一個base.html.twig,它只是幫助定義管理區域的導航欄和{% block content %}。它也有一些顯示菜單的MenuService。如果Voter可以使用Security Context註冊(請參閱here),我可以通過使用Tag System來使用AdminMenu子類別註冊此服務。

在base.html.twig中,我可能會使用Embedded Controller來呈現菜單。

現在有了這種架構,以替代其他bundles可以保持通過保持自己的管理員線路和接口封裝:

ProductController將現在也有ProductAdminController在那裏你可以在類定義中使用的路由前綴@Route("/admin")。任何路由都可以從該包中呈現模板,因爲模板在控制器名稱下。 Acme\ProductBundle\Resources\views\ProductAdmin\edit_products.html.twig,只要它們從MasterAdminBundle延伸base.html.twig並將其內容放入content塊。

對於其他的東西,如你想插入其他包的儀表板,我可能會繼續以相同的方式,在MasterAdminBundle中創建一個服務,並使用標籤將其他類加載到需要的數據中。

希望有道理,也許別人會有更好的解決方案,我也有興趣聽到,因爲這是我目前正在嘗試解決的問題。

+0

有趣。我沒有使用標籤系統,我會閱讀它。謝謝 – HappyDeveloper