2016-04-04 10 views
1

In einigen meiner Controller habe ich gemeinsame Route Parameter, die für mehrere Methoden übergeben werden. Einige dieser Parameter benötigen eine zusätzliche Verarbeitung (String-Verarbeitung), bei der die gleichen Parameter übergeben und die gleichen Verarbeitungsmethoden innerhalb jeder Controller-Methode aufgerufen werden müssen, die diese Parameter verwendet. Anstatt Code zu duplizieren, habe ich eine Eigenschaft, die mein Controller enthält, und den Aufruf dieses Merkmals in der Konstruktormethode des Controllers.Laravel Controller-Konstruktor Problem

Das funktioniert gut, ich kann diese Parameter an die Klasseneigenschaften binden und sie können von allen meinen Methoden zugegriffen werden. Das Problem tritt auf, wenn artisan-Befehle ausgeführt werden, die Controller wie z. B. artisan route:list instanziieren. Ich erhalte die folgende Fehlermeldung, wenn dieser Befehl ausgeführt wird:

Call to a member function getParameter() on null

Ich weiß, das ist so, weil ein Aufruf an Route::current() wird null zurückkehren, da es keine Strecke oder Request-Objekt ist, wenn Handwerker ausgeführt wird, aber ich finde mich mit Kommentar den Code in meinem Merkmal aus, nur um eine Liste meiner Routen zu bekommen. Ich bin mir sicher, dass es auch andere Probleme geben kann.

Meine Frage ist, wie kann ich angehen, um sauberer zu sein? Die einzige Lösung, an die ich derzeit denken kann, ist das Aufrufen meiner Parameter-Registrierungsmethode für jede Controller-Methode, aber das möchte ich nicht tun. Irgendwelche Ideen?

+0

wäre es schön, wenn Sie ein Beispiel hinzufügen können. – imrealashu

+0

Es ist eine ziemlich einfache Frage, ich brauche eine Möglichkeit, auf die Fassaden "Route" und "Request" innerhalb der Konstruktorfunktionen meiner Controller zuzugreifen, ohne mit "Handwerker" -Befehlen zu kollidieren. Ein Beispiel in diesem Fall ist nicht notwendig. – samrap

+0

Sie können 'if (php_sapi_name()! = 'Cli') {// Verwenden Sie die Anfrage und Riute}'. –

Antwort

0

Anstatt Eigenschaften zu verwenden, können Sie die Datei Controller.php jederzeit so ändern, dass sie gemeinsamen Code enthält, der von Ihren anderen Controllern geerbt wird. Da alle Ihre Controller extends Controller sind, wären die allgemeinen Funktionen verfügbar, so dass Sie einfach $this->getParameter() in Ihrem Code aufrufen können.

+0

Bitte lesen Sie das Ende meiner Frage, "Die einzige Lösung, die ich derzeit denken kann, ist das Aufrufen meiner Parameter-Registrierungsmethode auf jeder Controller-Methode, aber ich möchte das nicht tun". Und ja, ich verwende Eigenschaften, die in der abstrakten Controller.php-Klasse enthalten sind – samrap

Verwandte Themen