Sprache:

Suche

Die magische Verwendung von Macroables in Laravel

  • Teilen:
Die magische Verwendung von Macroables in Laravel

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

Usama Muneer

Usama Muneer

A web enthusiastic, self-motivated & detail-oriented professional Full-Stack Web Developer from Karachi, Pakistan with experience in developing applications using JavaScript, WordPress & Laravel specifically. Loves to write on different web technologies with an equally useful skill to make some sense out of it.