Ich benutze Apigility, auf ZF2 gebaut. Sobald die Anfrage an den Controller gesendet wird, muss ich die richtige Adapter-Anforderung auswählen - basierend auf eingehenden Parametern.zend framework 2: Wie kann man Factory-Controller richtig in den Controller einspeisen, um verschiedene Mapper-Klassen zu erhalten?
Normalerweise wird Controller von ControllerFactory
instanziiert, wo Sie alle Abhängigkeiten bereitstellen können, sagen wir, ich brauche eine Art Mapper-Klasse, die injiziert werden soll. Es ist einfach, wenn ich weiß, welches ich innerhalb des Controllers verwenden werde. Es ist problematisch, wenn der Controller entscheiden muss, welcher Mapper verwendet werden soll.
Lasst uns sagen Benutzer so etwas wie getStatus
mit param anfordert 'adapter1'
und ein anderer Benutzer dieselbe Aktion zugreift, aber mit param 'adapter2'
.
Also, ich muss adapter1
Mapper OR adapter2
Mapper injizieren, die ähnliche Schnittstelle, aber anderen Konstruktor hat.
Wie ist der richtige Umgang mit dieser Situation?
Eine mögliche Lösung ist, eine Art von Factory-Methode zu liefern, die angeforderten Adapter zur Verfügung stellt, aber - mit dem SM Int der Modellklasse sollte vermieden werden.
Eine andere Möglichkeit besteht darin, SM direkt in der Aktion des Controllers zu verwenden, aber dies ist nicht der beste Ansatz, da ich die Logik für eine andere Aktion/Controller nicht wiederverwenden kann.
Wie bitte damit umgehen?
Ich glaube, Sie in der Lage sind SM für den Zugriff auf Request-Objekt in Ihrem Betrieb verwenden. Also schnappen Sie sich einfach den Parameter und überprüfen Sie den Zustand, bevor Sie die Abhängigkeit von Ihrem Controller herstellen. Definieren Sie die Mapper-Schnittstelle bei Bedarf, wenn beide Adapter zur allgemeinen Schnittstelle gehören. –
Das ist leider nicht der Fall. Scheint, dass in Apigility gefilterte Parameter nur verfügbar sind, nachdem die Aktion aufgerufen wurde, nicht im Konstruktor. Ich habe das als erste Option getestet :) – Ivan