Wie kann ich eine URL in einem Console Controller in ZF2 erstellen?

8

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?

    
Nick 04.12.2014, 13:57
quelle

5 Antworten

0

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.

    
Alexey Kosov 30.01.2015 21:09
quelle
0

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 :)

    
Mr.TK 25.03.2015 10:20
quelle
0

Danke @Alexey Kosov für die Antwort. Sie werden wahrscheinlich ein Problem haben, wenn Ihre Anwendung in einem Unterverzeichnis und nicht in einem Stammverzeichnis nach der Domäne '/' arbeitet.

Sie müssen hinzufügen:

%Vor%

Vollständiger Code:

%Vor%     
Athlan 03.06.2015 08:10
quelle
0

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:

  1. AbstractActionController
  2. AbstractRestfulController
  3. 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

    
Kwido 06.12.2014 12:13
quelle
0

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:

  

/config/autoload/global.php

%Vor%
  

/config/autoload/local.php

%Vor%
  

/public/index.php (das Skript zum Starten der ZF2-Engine)

%Vor%

Und das ist alles was ich geändert habe .

Magie! Es klappt! : -)

Hoffe das hilft auch jemandem.

    
FlameStorm 03.05.2017 19:57
quelle

Tags und Links