Ich habe festgestellt, dass ein Symfony-Dienst nur initiiert wird (der Konstruktor wird ausgeführt), wenn eine Methode in diesem Dienst aufgerufen wird. Dies kann wichtig sein, wenn Ihr Dienst nur einen Konstruktor und keine Methoden hat.Symfony-Dienst wurde erst nach dem Methodenaufruf initiiert
Zum Beispiel:
class MyService {
public function __construct($someOtherService) {
$someOtherService->setFoo("bar");
}
}
// And of course put this service in services.yml
app.my_service:
class: AppBundle\...\MyService
arguments: [ app.some_other_service ]
In diesem Fall wird der Konstruktor und somit setFoo ("bar") wird nicht aufgerufen. Warum ist das? Ist es möglich, den Dienst zu erzwingen, um zu initiieren, ohne eine (Dummy-) Methode für diesen Dienst aufzurufen?
Ich habe auch versucht, "faul: false" für die app.my_service hinzuzufügen, aber das macht keinen Unterschied.
Ich benutze Symfony 2.8.
Sie interpretieren etwas falsch. Der Konstruktor wird aufgerufen, sobald Sie den Service vom Container erhalten haben. Durch die bloße Definition des Dienstes in services.yml wird der Dienst nicht instanziiert. – Cerad
Ja, also verstehe ich jetzt. Und ich wollte den Dienst laden, ohne ihn aus dem Container zu bekommen. – BigJ