2012-11-02 83 views
0

在過去的兩年裏,我一直在開發一個Symfony2的Web應用程序。現在,我已經通過走去,試圖解決一些問題,因爲它變得有點失控,我要使它易於維護。Symfony2的應用程序結構的最佳實踐

我的應用程序的結構分爲一系列束這樣的:

src/AppName/HelpBundle 
src/Appname/InterfaceBundle 
src/AppName/ProductBundle 
src/AppName/UserBundle 

InterfaceBundle只包含主要佈局在一些細枝模板和其他每個包的只是延長的是,如:

{% extends 'AppNameInterfaceBundle::layout.html.twig' %} 

對於控制器,每個控制器目錄具有兩個子目錄:用戶和管理員,例如:

src/AppName/ProductBundle/Controller/Admin/ProductCategoryController.php 
src/AppName/ProductBundle/Controller/User/ProductCategoryController.php 

這是構建一個symfony應用程序的適當的方式,還是應該怎樣做呢?

+1

似乎完全結構合理的我。 – phpisuber01

回答

1

問題不是很詳細,但對於我所看到的,我認爲你可以做的是以AdminBundle和UserBundle包含一組通用服務的方式來組織事物,這些通用服務允許您構建控制器重用它們。

然後,你可以有一系列類似ProductBundle是重複使用這些服務/互動束。在您的控制器中使用依賴注入,而不是擴展Symfony的Controller類;這種方式,您可以利用服務的繼承和你AdminBundle和UserBundle建立抽象的控制器,並利用它們來獲得特定的控制器。

更一般地說,我喜歡以一種方式構建Symfony應用程序,以便爲每個涉及交叉切割應用程序域的問題(例如搜索引擎中的實體索引,日誌記錄,URL生成等)創建一個提供一些抽象來處理它的包;對於域中的每個區域(例如產品管理,用戶管理等),我喜歡擁有一個實現抽象接口中提供的接口的bundle,並註冊要在提供的抽象中使用的特定服務。在這種情況下,可以通過容器的配置和標記系統完成接口連接。

這個問題是非常通用的,所以我的答案也是如此,如果你想更多的細節隨時提供更多的細節問題。