2013-03-05 55 views
0

我創建了一個派生自AbstractProcessingHandler的處理程序類。我已經看到,我可以把它放在src/MyNamespace/MyBundle/Monolog/中,但它讓我擔心了一下,因爲這個處理程序在我登錄數據的其他幾個bundle中使用。所以其他捆綁包需要MyBundle才能正常工作,只是因爲這個處理程序。我應該在哪裏將我的Monolog自定義處理程序放入我的Symfony2項目中?

我試圖把我的處理程序類放在lib/中,但它似乎不起作用(也許我必須對Autoload做一些特別的事情?)。

或者我應該爲這個處理函數創建一個新的bundle?

編輯:我真的不能將我的自定義處理程序類放在vendor/monolog/monolog/src/Monolog/Handler中,因爲那樣我就無法將它添加到我的git存儲庫中:因爲此文件夾由另一個git存儲庫管理(由Composer創建)

回答

2

在獨白的最後有真正的把它放在哪裏沒有限制,或者你怎麼稱呼它。關鍵僅在於它實現了monolog的HandlerInterface或從現有的一個處理程序擴展而來。

現在它取決於你的處理程序是什麼,如果它是通用的東西,其他人可以使用你可以提交它作爲拉請求monolog。
如果沒有,你可以爲它創建一個自己的作曲家包,或者把它放在src/Acme/Monolog/FooHandler或類似的東西里,這樣它就會保留在你的應用程序中,但顯然不在捆綁中。缺點是你需要將它配置爲你的一個bundle中的一個服務,所以你仍然對bundle有一些依賴。
也許把它作爲自己的捆綁包是有道理的。但是對於一個班級來說,這是相當多的樣板。
如果您的所有捆綁包都是特定於應用程序的,並且不太可能從其中解壓出來,但是具有跨捆綁依賴關係的方法在IMO中是沒有問題的。
無論如何,依賴關係不是很強大,因爲一個bundle可以包含處理程序並對其進行配置。其他包仍然可以登錄到monolog,即使處理程序不存在,他們也可以登錄。它只是不會去那個特定的處理程序。什麼都不該破

正如你所看到的,這只是很多的權衡,很難說哪個解決方案是最合適的,而不知道更多關於你的項目。

0

如果您想讓您的處理程序類在lib/中,您需要將lib/文件夾添加到您的composer.json自動載入部分。例如:

"autoload": { 
    "psr-0": { "": ["src/", "lib/"] } 
} 

看看作曲家文檔:

Basic Usage

Autoload

0

我認爲這裏常見的做法是在你的Bundle中使用一個「Bridge」目錄,並有明確的依賴關係。如果您有其他捆綁軟件依賴於此,我們所做的就是創建一個ServiceBundle,它基本上適用於應用程序內所有軟件包中的所有共享服務。如果你有分發這個捆綁軟件的計劃,這可能對你不太合適,但是否則可能。

相關問題