Überschreiben laravel 5 Helfer-Funktion
Ich bin mit der response()
Helfer sehr oft und ich nur die Daten zurück, die mit einer Nachricht an den Benutzer. Jetzt habe ich das http-status-code als auch, aber ich will nicht zu ändern, jede Antwort (die wahrscheinlich ist sowieso schlecht).
So, ich bin versucht zu überschreiben, die response()
Helfer-Funktion, durch die Erstellung meiner eigenen helpers.php
innerhalb app/Http/helpers.php
.
Wenn ich es in mein Komponisten-Dateien, es funktioniert autoload die aktuelle helpers.php im Rahmen der ersten und, wenn ich hinzufügen, dass es vor der autload gehören in bootstrap/global.php
ich nicht in der Lage, verwenden Sie die app()
und andere Laravel Funktionen.
Wie ich wäre in der Lage, dieses Problem zu lösen? Ich will einfach nur, um zu zählen, den status-code als auch im Antwort-array.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Laravel Hilfsfunktionen geschrieben, mit dieser Logik
zum ersten Laravel prüfen ist diese Funktion existiert, wenn es existiert, Laravel nicht festlegen, diese Funktion wieder(sonst wird es zu werfen schwerwiegende Fehler).
Also, wenn Sie definieren Ihre Funktion vor autoloader beinhalten
vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
- Dateidefinieren Sie Ihre eigene Antwort-Funktion.
Leider gibt es keine Möglichkeit zu sagen, composer laden Sie zuerst Ihr
autoload.files
Abschnitt, dann laravelautoload.files
. Aber man kann kleine hack ...öffnen
bootstrap/autoload.php
Datei, und schließen Sie die Datei vor dem autoloaderIch werde nicht direkt deine Frage zu beantworten da ich nicht weiß, ob es eine Lösung (ohne änderung Laravels
helpers.php
oder umbenennen-Funktion)Gibt es jedoch eine Lösung, den Rahmen für das gemeinsame verwenden Fall. Antwort Von Makros
Definieren Sie ein makro (dies erfolgt in einem service-provider)
Und Sie können es verwenden, wie diese:
Habe ich gerade dies tun, um das überschreiben der
now()
Helfer, so kann ich die Kontrolle über die scheinbare Zeit, wenn die Durchführung von tests. Ich folgte der regelmäßige Beratung erstellenapp/Http/helpers.php
und dann hinzufügen zubootstrap/autoload.php
etwa so:Dies funktioniert in der Regel, weil, wie Marty sagt, alle Helfer sind nur definiert, wenn es nicht eine bereits vorhandene Funktion mit diesem Namen. Also die beiden Zeilen von oben laden Sie Ihre eigene Helfer, dann führen Sie alle Anbieter autoloading, welches umfasst Laravel ist Helfer, und Ihre bereits definierten Funktion Vorrang.
Aber leider
autoload.php
scheint nicht verwendet werden, wenn Tests mit Behat, das ist, was ich verwende. Also brauchte ich eine alternative Lösung. Lange Rede, kurzer Sinn, die einzige einfache Möglichkeit, um sicherzustellen, dass Dateien geladen werden, bevor vendor-Dateien ist durch die Verwendung der https://github.com/funkjedi/composer-include-files Paket. Zitat aus seiner readme:Also installierte ich das Paket mit
composer require funkjedi/composer-include-files
und dann hat dieses zucomposer.json
:Sobald das erledigt ist, führen Sie
composer dump-autoload
zu regenerieren, die autoload-Dateien. Jetzt überschreibt die Arbeit sowohl während der normalen app-Betrieb, und bei der Ausführung von tests!