Was ist Macroable?
Wenn Sie keine Ahnung haben, was makrofähige Funktionalität ist, nehmen Sie es als etwas, das Sie innerhalb von Laravel mit einem Stück Code erweitern wollen, der nicht in der Class
. Kurz gesagt, Macros
ermöglichen es Ihnen, den internen Laravel-Komponenten benutzerdefinierte Funktionen hinzuzufügen.
Zum Beispiel hat Laravel standardmäßig Iluminate/Support/Str
Hilfsklasse, die die meisten der String-Hilfsfunktionen enthält, wie upper
, lower
, title
etc.
Lesen Sie auch: Tagging in Laravel
Nun müssen Sie einen Wert oder ein Symbol an eine Zeichenkette anhängen. Aber dafür gibt es keine Hilfsfunktion. Was würden Sie tun? Nun, es gibt eine Reihe von Möglichkeiten.
Traditioneller Weg
Der traditionelle objektorientierte Weg wäre die Erstellung einer weiteren Class
die dann die Iluminate/Support/Str
& definieren Sie darin Ihre eigene Hilfsmethode. Likeso
class MoreStrFunctions extends Str { public function appendsTo( $str, $param ) { return $str. $param; } }
Und es so zu nennen: (new MoreStrFunctions)->appendsTo();
ziemlich chaotisch, oder?
Magischer Weg
Umgekehrt können Sie eine einfache macro
wo Sie die Class
aber ohne tatsächliche Erweiterung der Class
. Verwirrt? Definieren und aufrufen macros
sind so einfach, wie Sie es sich wünschen.
Definieren eines Macros
Der allererste Schritt ist die Definition des Makros, aber die wichtigste Voraussetzung für die Definition eines Makros ist es, sicherzustellen, dass die Class
ist Macroable
oder, einfacher ausgedrückt, wenn die Class
wird erweitert Macroable trait
. Im Moment definieren wir sie innerhalb von boot()
methode von AppServiceProvider
. Das würde für den Moment reichen.
Str::macro('appendsTo',function($str, $param){ return $str. $param; });
Aufrufen einer Macro
Sobald das Makro definiert ist, können wir es überall innerhalb der Laravel-Anwendung likeso aufrufen.
Str::appendsTo('thewebtier','_');
Handhabung mehrerer Macros
Wenn Sie mehrere Makros für eine Macroable Class
. Einbindung in eine einzige Datei oder innerhalb boot()
Methode eines ServiceProvider
kann schnell ziemlich chaotisch aussehen. Um dieses Problem zu beheben, liefert Laravel innerhalb seiner Makrofunktionalität namens Mixins
.
Sie können eine separate Class
die alle diese Makros enthält. Um diese Klasse zu benutzen, verwenden wir Mixins
um unsere Makros zu initiieren.
Str::mixin(new Macros/StrMacros);
Vorläufig können Sie dieses Codestück innerhalb von boot()
Methode der AppServiceProvider
.
Jetzt innerhalb unserer StrMacros Class
, können wir so viele benutzerdefinierte Makros definieren, wie wir wollen.
Lesen Sie auch: Laravel in der Produktion einsetzen
class StrMacros { public function appendsTo( ) { return function($str,$param){ return $str.$param; }; } }
Wir können auch andere Hilfsfunktionen von Str
Class hier. Wir möchten zum Beispiel, dass die Ausgabezeichenfolge ausschließlich in Großbuchstaben erfolgt.
public function appendsTo( ) { return function($str,$param){ return static::upper($str) .$param; }; }
Eine weitere coole Magie der Definition von benutzerdefinierten Makros innerhalb von Methoden ist, dass die Methode selbst nicht die Parameter nimmt, sondern die zurückkehrende Callback-Funktion, die die Parameter weitergibt.
Lassen Sie uns ein weiteres einfaches Makro erstellen isGreaterThan
public function isGreaterThan( ) { return function($str,$length){ return static::length($str) > $length; }; }
Jetzt können Sie diese Makros überall in Ihrem Laravel-Projekt verwenden.
Str::isGreaterThan('thewebtier','10'); Str::appendsTo('usamamuneer','@');
Andere Macroable Komponenten in Laravel
Wie Sie bereits wissen, werden Makros in jeder Klasse definiert, die die Macroable trait
. Einige der wichtigsten makroskopischen Fassaden sind
- Request
- Response
- Route
- URL
- Cache
- File
- Lang
Fazit
Versuchen Sie selbst, einige Makros zu erstellen, und lassen Sie uns im Kommentarbereich unten wissen, wenn Sie auf ein Problem stoßen. Wir werden unser Bestes tun, um Ihnen zu helfen. Folgen Sie uns auf Twitter.
Lesen Sie auch: Eine zu viele polymorphe Beziehung in Laravel