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:
- https://stackoverflow.com/questions/8873824/symfony2-service-definition-issue
- Symfony2 Service Container - does get() return objects by reference or copy?
- How Service Container create object declared in services.yml?
Irgendwelche Ideen?
Warum in aller Welt würden Sie absichtlich Singleton verwenden .. ** für alles **!? Auch Ihre 'InMemoryPasteService :: fetchMany()' Methode macht keinen Sinn. –
@ 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? –