• Jeder User im Forum verpflichtet sich zur Akzeptanz und zur Einhaltung dieser Regeln:
    1. Umgangston
      Ein angemessener höflicher Umgangston, ohne Beleidigungen, Beschimpfungen und aggressive Postings ist für jedes Mitglied Pflicht.
    2. Beiträge
      Jedes Mitglied sollte sich bemühen nur sinnvolle Beiträge zum Thema zu posten. Dabei ist unbedingt vorher zu prüfen, ob das Thema vorher schon einmal diskutiert wurde und daher fortgesetzt werden kann
      • Suchfunktion benutzen!
      • offizielle Doku lesen!
    3. Haftung
      Jeder Beitragsersteller übernimmt die alleinige Verantwortung seiner Inhalte.
    4. Werbung
      Wir erlauben keine Beiträge, Signaturen, Private Nachrichten oder eMails an Benutzer, die Werbung enthalten. Ausgenommen
      sind Stellengesuche /-angebote, welche ausschließlich im Forum "Stellengesuche" veröffentlicht werden dürfen.
    5. Verstöße
      Regelwidrige Beiträge sollten dem Team gemeldet werden. Nach deren Überprüfung werden wir schnellstmöglich
      entsprechend handeln.
    6. Authorität
      Den Anweisungen der Team-Mitglieder (Administratoren und Moderatoren) sind in diesem Forum Folge zu leisten.
      Bei Fragen oder Beschwerden bitte an diese wenden.
    Wir möchten Euch darauf aufmerksam machen, dass es bei Verstößen gegen einen oder mehreren der oben genannten
    Punkte dem Team frei steht entsprechend zu handeln. Dies kann z.B. das Löschen eines Beitrags, das Ausschliessen bzw.
    Sperren von Mitgliedern oder aber lediglich eine Verwarnung sein.

    In diesem Zusammenhang sollte erwähnt werden, dass das Forum automatisch die IP-Adresse jedes Beitrag-Erstellers
    speichert. Bei schweren Vergehen, behalten wir es uns vor, die IP-Adresse zur Strafverfolgung weiterzugeben.
  • Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Controller Name in Factory ermitteln

fitti70

New member
Hallo,

ich muss in einer Factory, die einen Service erstellt, den Controllernamen ermitteln. Die ServiceFactory wird in Module.php in der Methode onBootstrap initialisiert und bekommt natürlich den ServiceLocator übergeben. Mittels ServiceLocator kann ich via get() auf verschiedene Klassen zugreifen, aber ich komme einfach nicht zum MvcEvent oder zu
  • getRouteMatch()
Hat jemand eine Idee?

VG
fitti


 

Kaiuwe

Super-Moderator
Willkommen im Forum! :)
ich muss in einer Factory, die einen Service erstellt, den Controllernamen ermitteln.
Ich nehme an, du meinst einen „Service“ wie er in der ZF-Doku beschrieben ist.
Leider sehe ich hier ein Problem in deiner Vorgehensweise, denn ein Service-Objekt muss nicht wissen, von wem es verwendet wird. Soll heißen, der Kontrollername oder gar die Existenz von Kontrollern haben nichts in einem Service-Objekt zu suchen. Auch für das reine Anlegen eines Service-Objekts, sollte es irrelevant sein, welcher Kontroller aktuell aufgerufen wird. Du schaffst hier ansonsten Abhängigkeiten, die dir früher oder später das Genick brechen.
Schaffe eine klare Trennung zwischen Service- und Kontroller-Objekt.

Die ServiceFactory wird in Module.php in der Methode onBootstrap initialisiert und bekommt natürlich den ServiceLocator übergeben.
Wozu in „Module.php“? Die Angabe in der Modul-Konfiguration sollte ausreichend sein. (Beispiel)
 

fitti70

New member
Hallo,

vielen Dank für die Antwort.

Ich habe das zum Anlass genommen, ein bisschen aufzuräumen und die entsprechenden Funktionen auszulagern. Vielleicht kannst du mir noch mal Rückmeldung geben, ob es nun besser zur Logik des Frameworks passt?
Der Service wird zwar immer noch in der Module.php initialisiert, weil dort auch die Session initialisiert und der Service im Anschluss den Controllern und Views als Plugin zur Verfügung gestellt wird.
In der onBoostrap-Methode wird ein Listener initialisiert, der auf diesen Service zugreifen muss. (Es handelt sich um einen User-Service, der alle möglichen Aufgaben rund um den eingeloggten User abwickelt und an vielen Stellen benötigt wird.)

Die Abfrage des Zielcontrollers habe ich aber jetzt in einen Listener ausgelagert.

Mir ging es darum, bei Abfragen die per Ajax eingehen, bestimmte "Setups" des Services auszulassen. Zum Beispiel soll die Session in der Datenbank nur geupdatet werden, wenn wirklich ein Seitenaufruf (und nicht eine Ajax-Abfrage) erfolgt.
Dies wird nun also vom Listener an den Service delegiert, außer der Controller befindet sich im Namespace "Ajax".


Vielen Dank und Grüße,

fitti
 

Kaiuwe

Super-Moderator
Ich erlaube mir mal, mit ein paar Fragen zu antworten. ;)

Vielleicht kannst du mir noch mal Rückmeldung geben, ob es nun besser zur Logik des Frameworks passt?
Warum zur Logik des Frameworks? Es ist deine Anwendung, dass Framework selbst gibt dir nur Empfehlungen oder weißt auf übliche Wege hin.

Der Service wird zwar immer noch in der Module.php initialisiert, weil dort auch die Session initialisiert
Warum? Nur weil irgendeine Session erzeugt wird, muss noch lange nicht das Service-Objekt an gleicher Stelle erstellt werden.

und der Service im Anschluss den Controllern und Views als Plugin zur Verfügung gestellt wird.
Wozu? Factory verwenden!

In der onBoostrap-Methode wird ein Listener initialisiert, der auf diesen Service zugreifen muss. (Es handelt sich um einen User-Service, der alle möglichen Aufgaben rund um den eingeloggten User abwickelt und an vielen Stellen benötigt wird.)
Und? Den Listener kannst du doch erstellen, aber das Service-Objekt ist doch in dem Moment uninteressant.

Die Abfrage des Zielcontrollers habe ich aber jetzt in einen Listener ausgelagert.
Warum klammerst du dich an den Kontroller? Vergiss dies, denn hier fängst du wieder an, das Wissen über die Existenz von Kontrollern über die ganze Anwendung zu verstreuen. Das muss niemand wissen, das will niemand wissen.

Klar, du willst auf Ajax raus, aber dann setze dies richtig um: Prüfe das „Request“-Objekt ob es sich um eine Ajax-Anfrage handelt. („Zend\Http\Request::isXmlHttpRequest“)
 

fitti70

New member
Vielen Dank Kaiuwe.
Die Fragen sind berechtigt, ich muss da noch mal ran und ein paar grundlegende Dinge ändern.
Die Lösung der Request-Abfrage ist so einfach wie genial. Ich habe nächtelang gebrütet, wie man das am elegantesten lösen kann. Jetzt habe ich zwar ein schickes Ajax-Modul, werde aber trotzdem alles nochmal umkrempeln... :)
VG
fitti
 

Kaiuwe

Super-Moderator
In deine Überlegungen solltest du folgendes mit einbeziehen: Jede Modul-Klasse sollten sauber bleiben! (Sauber heißt: nur die Methode „getConfig“ ist enthalten)

Damit zwingt man sich selbst, eine geeignete Lösung zu finden. (Die geeignete Lösung ist dann meist der richtige Weg.)
 
Oben