2012-04-01 11 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は、デフォルトのスコープは、「コンテナ」ですので、私は私のサービスクラスの1つのインスタンスがあるはず意味することを取ると言います。

私は(ベンダーなし)symfonyの標準ディストリビューションバージョン2.0.12から始まりました。

ソースコード:

おそらく同様の記事:

任意のアイデア?

+0

なぜあなたは意図的にシングルトンを使用しますか?**何でも**!また、 'InMemoryPasteService :: fetchMany()'メソッドは意味をなさない。 –

+0

@tereško申し訳ありませんが、プログラミング言語の設計についてよく分かりませんが、シングルトンは正しい単語ではないかもしれません。たぶん[この文書](http://symfony.com/doc/current/book/service_container.html)は、Symfony2がサービスの利用を奨励する理由を理解するのに役立ちます。 fetchMany()に関しては、コードは進行中の作業です。私はthetメソッドを更新しました。今あなたには意味がありますか? –

答えて

11

このようにリクエスト間に状態が保存されることはありません。あたかもPHPインタープリタが各要求の間にリブートされたかのように考えることができます。それがPHPの仕組みです。 this postspl_object_hashによれば

2

は、オブジェクトの内部ポインタのMD5ハッシュを生成します。だから、それは要求間に異なるハッシュを与えるのが普通です。ハッシュは同じ要求サイクルで変更されません。

関連する問題