Entwicklung von Erweiterungspaketen


Erweiterungspaket-Entwicklung

Einführung

Die Erweiterungspaket ist für Die wichtigste Möglichkeit, Funktionen in Laravel hinzuzufügen. Erweiterungspakete können viele nützliche Funktionen enthalten, wie zum Beispiel das Zeitverarbeitungs-Erweiterungspaket Carbon oder das Erweiterungspaket Behat, das ein vollständiges BDD-Test-Framework bereitstellt.

Natürlich gibt es viele Arten von Erweiterungspaketen. Einige Erweiterungen sind eigenständig, d. h. sie können mit jedem PHP-Framework verwendet werden. Carbon und Behat sind solche eigenständigen Erweiterungspakete. Um dieses Erweiterungspaket in Laravel zu verwenden, müssen Sie es nur in der Datei composer.json einführen.

Andererseits können einige Erweiterungen nur in Laravel verwendet werden. Diese Erweiterungspakete können Dateien enthalten, die speziell zur Verbesserung der Routen, Controller, Ansichten und Konfigurationen Ihrer Laravel-Anwendung entwickelt wurden. In diesem Handbuch wird hauptsächlich die Entwicklung von Laravel-Erweiterungspaketen vorgestellt.

Fassadenanmerkung

Bei der Entwicklung von Laravel-Anwendungen gibt es normalerweise keinen Unterschied zwischen der Verwendung von Verträgen oder Fassaden alle bieten im Wesentlichen die gleichen Testfähigkeiten. Bei der Entwicklung von Erweiterungspaketen hat das Erweiterungspaket jedoch keinen Zugriff auf alle von Laravel bereitgestellten Testhilfsfunktionen. Wenn Sie Testfälle für ein Erweiterungspaket wie in einer Laravel-Anwendung schreiben möchten, können Sie das Erweiterungspaket Orchestral Testbench verwenden.

Erweiterungspakete entdecken

In der config/app.php-Konfigurationsdatei der Laravel-Anwendung definiert die Option providers die Liste der Dienstanbieter, die von Laravel geladen werden können. Wenn jemand Ihre Erweiterung installiert, müssen Sie Ihren Dienstanbieter in diese Liste aufnehmen. Anstatt dass Benutzer Ihre Dienstanbieter manuell zu einer Liste hinzufügen müssen, können Sie Ihre Dienstanbieter im Abschnitt composer.json der Datei extra Ihrer Erweiterung definieren. Zusätzlich zu den Dienstanbietern können Sie auch alle Fassaden auflisten, die Sie registrieren möchten:

"extra": {
    "laravel": {     
       "providers": [          
         "Barryvdh\Debugbar\ServiceProvider"     
          ],       
        "aliases": {          
          "Debugbar": "Barryvdh\Debugbar\Facade"      
            }   
          }
     },

Sobald Ihr Erweiterungspaket so konfiguriert ist, dass es auffindbar ist, registriert Laravel während der Installation automatisch die Dienstanbieter und Fassaden des Erweiterungspakets . Bieten Sie Benutzern von Erweiterungspaketen ein benutzerfreundliches Installationserlebnis.

Erweiterungspakete gezielt entdecken

Wenn Sie Erweiterungspaketbenutzer sind und verhindern möchten, dass ein Erweiterungspaket entdeckt wird, können Sie dies im composer.json der Anwendung tun Datei Listen Sie diese Erweiterung im extra-Teil auf:

"extra": { 
   "laravel": {      
     "dont-discover": [          
       "barryvdh/laravel-debugbar"       
      ]  
    }
},

Sie können sie auch in der dont-discover-Direktive der Anwendung verwenden * Zeichen, deaktiviert die Paketerkennung:

"extra": {
    "laravel": {     
       "dont-discover": [     
            "*"   
          ] 
       }
    },

Dienstanbieter

Dienstanbieter ermöglicht Ihnen das Erweiterungspaket mit Laravel. Der Dienstanbieter ist dafür verantwortlich, etwas an den Dienstcontainer von Laravel zu binden und Laravel mitzuteilen, wo die Ressourcendateien des Erweiterungspakets geladen werden sollen, z. B. Ansichten, Konfigurationsdateien, Sprachpakete usw. Der Dienstanbieter

erbt die Klasse IlluminateSupportServiceProvider und enthält zwei Methoden: register und boot. Die Basisklasse ServiceProvider befindet sich im Composer-Erweiterungspaket mit dem Namen illuminate/support und Sie müssen sie zu Ihren Erweiterungspaketabhängigkeiten hinzufügen. Weitere Informationen zur Struktur und zum Zweck von Dienstleistern finden Sie hier Seine Dokumentation.

Ressourcendateien

Konfiguration

Manchmal müssen Sie die Erweiterungspaket-Konfigurationsdatei in der Anwendung selbst veröffentlichen config Verzeichnis. Auf diese Weise können Benutzer, die das Erweiterungspaket verwenden, die Standardkonfigurationselemente problemlos überschreiben. Um die Konfigurationsdatei des Erweiterungspakets zu veröffentlichen, müssen Sie nur die Methode boot in der Methode publishes des Dienstanbieters aufrufen:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){
     $this->publishes([    
         __DIR__.'/path/to/config/courier.php' => config_path('courier.php'),  
        ]);
    }

Wenn nun der Benutzer des Erweiterungspakets den Befehl vendor:publish von Laravel ausführt, Die Erweiterungspaketdatei wird in das angegebene Verzeichnis kopiert. Sobald Ihre Konfigurationsdatei veröffentlicht ist, kann natürlich wie auf jede andere Konfiguration zugegriffen werden:

$value = config('courier.option');

{note} Sie sollten keine Abschlussfunktionen in Konfigurationsdateien definieren. Denn wenn der Benutzer den Befehl config:cache Artisan ausführt, wird die Konfigurationsdatei nicht korrekt serialisiert.

Standardkonfiguration des Erweiterungspakets

Sie können die Standardkonfiguration des Erweiterungspakets auch mit der Kopierkonfiguration der Anwendung zusammenführen. Dadurch können Benutzer von Erweiterungspaketen die Konfigurationsoptionen definieren, die sie in der Replikatkonfigurationsdatei überschreiben möchten. Um Konfigurationen zusammenzuführen, rufen Sie einfach die Methode register in der Methode mergeConfigFrom des Dienstanbieters auf:

/**
 * 在容器中注册绑定。
 *
 * @return void
 */
 public function register(){
     $this->mergeConfigFrom(    
         __DIR__.'/path/to/config/courier.php', 'courier'   
       );
  }

{note} Diese Methode führt nur die erste Dimension des Konfigurationsarrays zusammen. Wenn der Erweiterungsbenutzer ein mehrdimensionales Konfigurationsarray definiert, werden fehlende Optionen nicht zusammengeführt.

Routing

Wenn Ihr Erweiterungspaket Routing-Dateien enthält, müssen Sie die Methode loadRoutesFrom verwenden um sie zu laden. Diese Methode ermittelt automatisch, ob die angewendete Route zwischengespeichert wurde. Wenn die Route zwischengespeichert wurde, wird Ihre Routendatei nicht geladen:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){ 
    $this->loadRoutesFrom(__DIR__.'/routes.php');
  }

Datenbankmigration

Wenn Ihr Erweiterungspaket eine Datenbankmigration enthält, müssen Sie Laravel dies mit der Methode loadMigrationsFrom mitteilen So laden Sie sie. Die loadMigrationsFrom-Methode erfordert den Pfad zur Erweiterungspaket-Migrationsdatei als einziges Argument:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){ 
    $this->loadMigrationsFrom(__DIR__.'/path/to/migrations');
   }

Sobald Ihre Erweiterungspaket-Migrationsdateien registriert sind, werden sie automatisch ausgeführt, wenn der Befehl php artisan migrate ausgeführt wird. Sie müssen sie nicht in das Verzeichnis database/migrations Ihrer Anwendung importieren.

Sprachpaket

Wenn Ihr Erweiterungspaket Sprachpaketdateien enthält, müssen Sie die Methode loadTranslationsFrom verwenden Sagen Sie Laravel, wie man sie lädt. Wenn Ihr Erweiterungspaket beispielsweise den Namen courier hat, müssen Sie der boot-Methode des Dienstanbieters den folgenden Inhalt hinzufügen:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){
     $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');
 }

Die Erweiterungspaket-Übersetzungskonvention verwendet die package::file.line-Syntax für Referenzen. Daher können Sie die courier-Zeile der messages-Datei im welcome-Erweiterungspaket wie folgt laden:

echo trans('courier::messages.welcome');

Publish Language Pack

if If Wenn Sie das Sprachpaket im Erweiterungspaket im resources/lang/vendor-Verzeichnis der Anwendung veröffentlichen möchten, können Sie das publishes des Dienstanbieters verwenden Methode. Die Methode publishes empfängt ein Array mit dem Sprachpaketpfad und dem entsprechenden Veröffentlichungsort. Um beispielsweise die Sprachpaketdatei des courier-Erweiterungspakets zu veröffentlichen, lautet der Vorgang wie folgt:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){
     $this->loadTranslationsFrom(__DIR__.'/path/to/translations', 'courier');    
     $this->publishes([    
         __DIR__.'/path/to/translations' => resource_path('lang/vendor/courier'),   
       ]);
  }

Wenn nun der Benutzer des Erweiterungspakets den vendor:publish Artisan-Befehl von Laravel ausführt, wird das Sprachpaket angezeigt wird im angegebenen Verzeichnis veröffentlicht.

Ansicht

Um die Ansicht Ihres Erweiterungspakets in Laravel zu registrieren, müssen Sie Laravel den Speicherort der Ansichtsdatei mitteilen. Sie können dies mit der loadViewsFrom-Methode des Dienstanbieters tun. Die Methode loadViewsFrom ermöglicht den Empfang von zwei Parametern: Pfad der Ansichtsvorlage und Name des Erweiterungspakets. Wenn Ihr Erweiterungspaket beispielsweise den Namen courier hat, müssen Sie den folgenden Inhalt zur boot-Methode des Dienstanbieters hinzufügen:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){
     $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');
   }

Die Ansichtskonvention für Erweiterungspakete verwendet die package::view-Syntax für Referenzen. Sobald der Ansichtspfad erfolgreich beim Dienstanbieter registriert wurde, können Sie daher die folgende Methode verwenden, um die courier-Ansicht im admin-Erweiterungspaket zu laden:

Route::get('admin', function () { 
   return view('courier::admin');
});

Rewrite-Erweiterung Paketansichten

Wenn Sie die loadViewsFrom-Methode verwenden, registriert Laravel die Ansicht tatsächlich an zwei Stellen: dem resources/views/vendor der Anwendung Verzeichnis und Ihr benutzerdefiniertes Verzeichnis. Am Beispiel des Erweiterungspakets courier prüft Laravel zunächst, ob der Entwickler in resources/views/vendor/courier eine benutzerdefinierte Version der Ansicht bereitgestellt hat. Wenn die Ansicht dann noch nicht definiert wurde, durchsucht Laravel das in loadViewsFrom definierte Ansichtsverzeichnis. Dieser Ansatz ermöglicht es Benutzern, die Ansichten des Erweiterungspakets einfach anzupassen oder zu überschreiben.

Ansicht veröffentlichen

Wenn Sie Ihre Ansicht im resources/views/vendor-Verzeichnis Ihrer App veröffentlichen möchten, können Sie die publishes-Methode des Dienstanbieters verwenden. Die publishes-Methode empfängt ein Array mit dem Ansichtspfad und dem entsprechenden Veröffentlichungsort:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){ 
    $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier');    
    $this->publishes([     
       __DIR__.'/path/to/views' => resource_path('views/vendor/courier'), 
      ]);
  }

Wenn nun der Benutzer des Erweiterungspakets den vendor:publish Artisan-Befehl von Laravel ausführt, wird die Ansicht im Benutzer veröffentlicht Verzeichnis.

Befehl

Um den Artisan-Befehl des Erweiterungspakets in Laravel zu registrieren, müssen Sie den <🎜 verwenden > Methode. Diese Methode empfängt ein Array von Befehlsklassen. Sobald diese Befehle erfolgreich registriert wurden, können sie über die Artisan-Befehlszeile ausgeführt werden: commands

/**
 * 引导应用服务。
 *
 * @return void
 */
 public function boot(){  
   if ($this->app->runningInConsole()) {      
     $this->commands([         
        FooCommand::class,            
        BarCommand::class,       
      ]);  
    }
  }

Public Resource Files

Ihre Das Erweiterungspaket enthält möglicherweise Ressourcendateien wie JavaScript, CSS und Bilder. Um diese Ressourcendateien im Verzeichnis

der Anwendung zu veröffentlichen, können Sie die Methode public des Dienstanbieters verwenden. Im folgenden Beispiel können wir auch ein publishes-Ressourcenklassifizierungs-Tag hinzufügen, das zur Klassifizierung verwandter veröffentlichter Ressourcen verwendet werden kann: public

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){ 
    $this->publishes([     
       __DIR__.'/path/to/assets' => public_path('vendor/courier'),  
     ], 'public');
 }

Wenn nun der Benutzer des Erweiterungspakets den Befehl

ausführt, Ihre Ressourcendatei wird in das angegebene Verzeichnis kopiert. Da Ressourcendateien normalerweise jedes Mal überschrieben werden müssen, wenn ein Erweiterungspaket aktualisiert wird, muss das Tag vendor:publish verwendet werden: --force

php artisan vendor:publish --tag=public --force

Gruppendateien veröffentlichen

Möglicherweise möchten Sie Erweiterungspaket-Ressourcendateien oder Ressourcen separat verpacken und veröffentlichen. Beispielsweise möchten Sie möglicherweise, dass Benutzer Konfigurationsdateien in einem Erweiterungspaket einzeln veröffentlichen, anstatt gezwungen zu werden, alle Ressourcendateien in einem Erweiterungspaket zu veröffentlichen. Sie können verschiedene Dateien „taggen“, indem Sie die Methode publishes im Erweiterungspaketdienstanbieter aufrufen. Lassen Sie uns beispielsweise die boot-Methode im Erweiterungspaketdienstanbieter verwenden, um zwei Veröffentlichungsgruppen zu definieren:

/**
 * 在注册后启动服务。
 *
 * @return void
 */
 public function boot(){
     $this->publishes([    
         __DIR__.'/../config/package.php' => config_path('package.php')  
       ], 'config'); 
      $this->publishes([    
          __DIR__.'/../database/migrations/' => database_path('migrations')  
        ], 'migrations');
       }

Jetzt können Ihre Benutzer entsprechend den definierten Tags veröffentlichen, indem sie den Befehl vendor:publish ausführen. Verschiedene Gruppendateien :

php artisan vendor:publish --tag=config
Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.