2012-04-01 65 views
3

我創建的Symfony2的頂部的簡單引擎收錄的Web應用程序,但我不能讓一個全球性的/單/「容器範圍的」服務。我可能會犯一個初學者的錯誤。Symfony2的服務不是單

The symfony2 service container doc表示服務「只創建一次,並且每次請求服務時返回相同的實例」,但是我的服務構造函數在每個請求中都被調用。

我可以從日誌很容易地驗證這一點。我剛剛刷新/p/new,我看到另一個

[2012-03-31 21:32:56] app.INFO: InMemoryPasteService::__construct() [] [] 

我也證實了記錄的

spl_object_hash($this->get('twobulb_paste_service')) 

結果在控制器(和哈希不同的是爲每一個請求)。

環境(應用程序/ PROD)似乎並不重要。

How to work with Scopes表示默認範圍是「容器」,所以我認爲這意味着,應該只有我的服務類的一個實例。

我開始與Symfony的標準分配(不包括供應商)版本2.0.12。

的源代碼:

可能類似的帖子:

任何想法?

+0

爲什麼地球上你會故意使用單身.. **任何事情**!?你的'InMemoryPasteService :: fetchMany()'方法也沒有意義。 – 2012-04-01 11:29:07

+0

@tereško對不起,我對編程語言設計瞭解不多,單身人士可能不是合適的單詞。也許[這個文檔](http://symfony.com/doc/current/book/service_container.html)將幫助你理解爲什麼Symfony2鼓勵使用服務。至於fetchMany(),代碼是一個正在進行的工作。我剛剛更新了這個方法。現在對你有意義嗎? – 2012-04-01 22:57:13

回答

11

以這種方式在請求之間沒有保存狀態。您可以將其視爲在每個請求之間重新啓動PHP解釋器。這就是PHP的工作原理。

2

根據this postspl_object_hash創建的對象的內部指針的MD5哈希值。所以它在請求之間給出不同的散列是正常的。哈希不會在相同的請求週期中更改。