2014-02-07 195 views
-1

現在,即時通訊面臨三個關於使用Doctrine 2的symfony 2應用程序體系結構的問題。這是一個捆綁應用程序。Symfony 2體系結構 - 最佳實踐

  1. 我將使用過程中的一些控制器,但我需要一些專用控制器「BeforeController」別人之前被調用。在「BeforeController」中,我想放置一些初始化方法。通過「BeforeController」擴展控制器是否是最佳實踐?

  2. 我想在ServiceContainer中創建一些服務。對於我擁有的每個實體,我想要創建自己的服務(例如,有產品實體,因此我將創建產品服務,該服務提供與產品等操作的方法),如果這是一種好方法。或者它在控制器的能力?

  3. 有人可以解釋我,控制器或服務能力是什麼?

我想創建一些邏輯和直觀的架構。也許任何類圖都可以幫助我。

有人能爲我描述一些最佳實踐嗎?

回答

3

從文檔:

  1. kernel.controller Event,和例如:Before filters with the kernel.controller Event
  2. 服務:Service base info多:What is a Service?Controller base info,並且另外Action。如果您真的需要爲每個實體創建單獨的服務,那沒什麼問題。
  3. 如上所述。

我推薦這個視頻從SymfonyCon華沙2013 How Kris Writes Symfony Apps

希望得到這個幫助。

+0

謝謝。第一個答案很舒服,我正在尋找這樣的東西。我已經在第二點讀了你的帖子,但是我仍然不知道,如果我明白的話。在MVC中,控制器應該使用模型(在這種情況下是實體)。在我的情況下,是與實體合作的服務。因此,在控制器中,沒有像find(by,all)這樣的查詢...如果控制器查找某個實體,它會調用某個服務,該服務將使用存儲庫返回所需的實體。這是一個好方法嗎? – gavec

+2

這取決於。如果你只想使用服務(對於實體)來獲得結果,你應該只使用'Repository'。並在你的控制器調用這樣的:'$ results = $ this-> getDoctrine() - > getRepository('YourBundle:EntityName') - > getSth($ param1,$ param2 ...)'。當然,你必須在你的EntityNameRepository中實現'getSth()'。 – NHG

+0

服務不會僅用於實體。應該有另一個邏輯。主要是,這些類(服務)將作爲另一個類的依賴關係。對不起,這是我想沒有提到。所以我想,這是一個好方法,對吧? – gavec