Ich versuche Service Manager für meine Entitätsklasse zu verwenden, aber ich weiß nicht, wie ich das am besten machen soll.Die beste Methode, ServiceManager in der Modellklasse zu verwenden?
Es ist einfach auf einem Controller, weil wir Service-Manager mit aufrufen können: $ this-> getServiceLocator();
Aber meiner Entitätsklasse, auch wenn ich ServiceLocatorAwareInterface implementiert, kann ich retieve Servicemanager, weil meine Entitätsklasse mit dem Service-Manager nicht nennen wird:
Also, was ist der beste Weg:
1 - Übergeben Sie ServiceManager in meiner Entitätsklasse von meinem Controller aus 2 - Verwenden von ServiceManager zum Erstellen meiner Entitätsklasse 3 - ...?
am besten, um mein Problem zu verstehen, das ist mein Code, der nicht funktioniert:
Meine Entitätsklasse:
class Demande extends ArraySerializable implements InputFilterAwareInterface {
/../
public function getUserTable() {
if (! $this->userTable) {
$sm = $this->getServiceLocator();//<== doesn't work !
$this->userTable = $sm->get ('Application\Model\UserTable');
}
return $this->userTable;
}
Sehr nützliche Antwort! Ein weiterer Grund, den ServiceManager nicht in das Modell zu injizieren, ist, dass wir auf diese Weise unser Objekt nicht serialisieren können (wegen der Schließung des ServiceManagers). Und so können wir keine Modelle in der Sitzung speichern. –
Das Einzige, was hinzugefügt werden muss, ist, dass du 'Closure' nicht zu viel benutzen solltest. Schreibe stattdessen Factory-Klassen. Dies erhöht die Gesamtleistung, da die Klassen nur bei Bedarf instanziiert werden. Alle Closures werden bei jeder Anfrage instanziiert. – Sam
Noch eine Sache: Wenn einige Abhängigkeiten unbedingt ** erforderlich sind, ist es sehr empfehlenswert, '__construct()' oder Injektion statt Setter-Injection – Sam