2012-04-01 2 views
3

Ich erstelle eine einfache Pastebin Web-Anwendung auf Symfony2, aber ich kann nicht einen globalen/Singleton/"Container-Bereich" Service. Ich mache wahrscheinlich einen Anfängerfehler.Symfony2-Dienst ist kein Singleton

The symfony2 service container doc sagt Dienste sind "nur einmal erstellt und die gleiche Instanz wird jedes Mal zurückgegeben, wenn Sie nach dem Dienst fragen", aber mein Dienst Konstruktor wird bei jeder Anfrage aufgerufen.

Ich kann dies ziemlich einfach aus den Protokollen überprüfen. Ich refresh nur /p/new und ich sehe ein anderes

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

ich auch, indem Sie das Ergebnis der

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

In der Steuerung bestätigt haben (und der Hash ist für jeden Anfrage).

Die Umgebung (App/Prod) scheint keine Rolle zu spielen.

How to work with Scopes sagt der Standardbereich ist "Container", so dass ich meine, dass es nur eine Instanz meiner Service-Klasse sollte.

Ich begann mit der Symfony-Standard-Distribution (ohne Anbieter) Version 2.0.12.

Quellcode:

Möglicherweise ähnliche Beiträge:

Irgendwelche Ideen?

+0

Warum in aller Welt würden Sie absichtlich Singleton verwenden .. ** für alles **!? Auch Ihre 'InMemoryPasteService :: fetchMany()' Methode macht keinen Sinn. –

+0

@ tereško Sorry, ich weiß nicht viel über Programmiersprachen Design, Singleton ist vielleicht nicht das richtige Wort. Vielleicht hilft Ihnen [dieses Dokument] (http://symfony.com/doc/current/book/service_container.html) zu verstehen, warum Symfony2 die Nutzung von Diensten fördert. Wie für FetchMany(), der Code ist eine Arbeit in Arbeit. Ich habe gerade die Methode aktualisiert. Macht es dir jetzt Sinn? –

Antwort

11

Zwischen den Anforderungen wird auf diese Weise kein Status gespeichert. Sie können es so betrachten, als würde der PHP-Interpreter zwischen jeder Anfrage neu gestartet. So funktioniert PHP.

2

Nach this postspl_object_hash erstellt MD5-Hash des internen Zeigers des Objekts. Es ist also normal, dass es zwischen Anfragen unterschiedliche Hashwerte gibt. Der Hash ändert sich nicht im selben Anfragezyklus.