Ich habe einen Konsolen-Controller und eine Aktion zum Senden von E-Mails (wie unten in module.config.php definiert)
%Vor%In der Aktion möchte ich eine E-Mail senden, die einen Link zu einer anderen Aktion auf der Website enthält. Dies würde normalerweise mit einem URL View Helper geschehen, aber da die Anfrage vom Typ Console und nicht HTTP ist, funktioniert das nicht. Ich habe versucht, eine HTTP-Anfrage zu erstellen, aber ich weiß nicht, wie ich ihr die Site-Domain oder den Controller / Action-Link geben soll.
Mein Controller-Code:
%Vor%Dies wirft einen Fehler auf:
%Vor%Wie erstelle ich eine HTTP-Anfrage in einem Konsolen-Controller, der das Site-Schema, die Domain und den Pfad / zu / Aktion hat? Und wie gebe ich es an den URL View Helper weiter?
Hier ist, wie dieses Problem gelöst werden kann:
%Vor%Natürlich müssen Sie Standardwerte für Host und Schema in der Konfiguration definieren, da es nicht möglich ist, sie automatisch im Konsolenmodus zu erkennen.
Ich kann es nicht glauben, aber ich habe es getan:)
Ich hoffe, es wird für euch alle funktionieren.
Im Controller, wo die Funktion fromRoute () verwendet wird, habe ich folgende Zeilen hinzugefügt:
%Vor%Ausgabe:
%Vor%Natürlich ist route_parent / route_child keine Konsolenroute, sondern HTTP-Route :)
Aktualisierung: Die richtige Antwort für diesen Beitrag finden Sie hier: Stackoverflow: Verwendung von HTTP-Routen in der ZF2-Konsolenanwendung
Nun, du bist sehr nah dran, aber du verwendest nicht das Url
-Plugin. Wenn Sie ein wenig tiefer in die ZF2 Dokumentation der Controller Plugins eingetaucht sind, hätten Sie die Lösung gefunden.
Siehe als Referenz: ZF2-Dokumentation - Controller-Plugins
Ihr ConsoleController
muss eines der folgenden implementieren, um die Controller-Plugins abrufen zu können:
AbstractActionController
AbstractRestfulController
setPluginManager
Nun, ich empfehle, den Controller mit AbstractActionController
zu erweitern, wenn Sie es noch nicht gemacht haben.
Falls Sie AbstractActionController
verwenden, können Sie einfach $urlPlugin = $this->url()
aufrufen, da AbstractActionController
eine __call()
-Implementierung hat, die das Plugin für Sie aufruft. Sie können aber auch verwenden: $urlPlugin = $this->plugin('url');
Um die URL für Ihre E-Mail zu generieren, können Sie in Ihrem Controller Folgendes tun:
%Vor% Sie können diese URL jetzt an Ihre viewModel
übergeben oder den URL viewHelper in Ihrem viewModel verwenden, aber das liegt bei Ihnen.
Versuchen Sie, viewHelpers in Ihrem Controller zu vermeiden, da wir Plugins für diesen Fall zur Verfügung haben.
Falls Sie sich fragen, welche Methoden AbstractActionController
hat, hier ist ZF2 ApiDoc - AbstractActionController
Damit dies funktioniert, müssen Sie Ihre Routenkonfiguration mit einer geeigneten Struktur einrichten:
%Vor%Wenn Sie ein Konsolenmodul haben, bleiben Sie einfach bei den Routenpfaden der Konsole. Vergessen Sie nicht die Taste console mit allen darunter liegenden Routen! In der Dokumentation finden Sie eine Referenz: ZF2 - Dokumentation: Konsolenrouten und Routing
Ich hatte ein ähnliches Problem mit der Zend-Konsole - der serverUrl
view-Helfer funktionierte auch standardmäßig nicht richtig.
Mein Fall:
/module/Application/src/Application/Controller/ConsoleController.php
%Vor%/module/Application/view/application/emails/some_email_template.phtml
%Vor% Der Helper " serverUrl
view" gibt unter Console Controller (nur bei cron) nur "http://"
zurück. Die gleiche Vorlage wird jedoch ordnungsgemäß unter Web-HTTP-Anforderungen gerendert, die von anderen Controllern verarbeitet werden.
Ich habe es auf diese Weise behoben:
%Vor%/config/autoload/global.php
%Vor%/config/autoload/local.php
%Vor%/public/index.php (das Skript zum Starten der ZF2-Engine)
Und das ist alles was ich geändert habe .
Magie! Es klappt! : -)
Hoffe das hilft auch jemandem.
Tags und Links php zend-framework2