Entwicklung von Erweiterungspaketen
Erweiterungspaket-Entwicklung
- Einführung
- Erweiterungspaket entdecken
- Dienstleister
- Ressourcenkunst Datei
- Befehl
- Öffentliche Ressourcendatei
- Gruppendateien veröffentlichen
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 FilesIhre 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