Grundlegende Plugin-Generierung und Veröffentlichungsprozess
Prinzip
- Am Beispiel eines Cross-Domain-Plugins besteht das Plugin aus drei Teilen: einer Middleware-Programmdatei für die Cross-Domain, einer Middleware-Konfigurationsdatei middleware.php und einer Install.php, die automatisch über einen Befehl generiert wird.
- Wir verwenden einen Befehl, um die drei Dateien zu packen und auf composer zu veröffentlichen.
- Wenn Benutzer das Cross-Domain-Plugin über composer installieren, kopiert Install.php die Middleware-Programmdaten sowie die Konfigurationsdatei in
{Hauptprojekt}/config/plugin
, damit webman sie laden kann. Dadurch wird eine automatische Konfiguration der Cross-Domain-Middleware-Datei wirksam. - Wenn Benutzer das Plugin über composer entfernen, wird Install.php die entsprechenden Middleware-Programmdaten und Konfigurationsdateien löschen, wodurch eine automatische Deinstallation des Plugins erfolgt.
Spezifikationen
- Der Plugin-Name besteht aus zwei Teilen,
Hersteller
undPlugin-Name
, z.B.webman/push
, dies entspricht dem composer-Paketnamen. - Die Konfigurationsdateien des Plugins werden einheitlich unter
config/plugin/Hersteller/Plugin-Name/
abgelegt (Kommandozeilenbefehle erstellen das Konfigurationsverzeichnis automatisch). Wenn das Plugin keine Konfiguration benötigt, muss das automatisch erstellte Konfigurationsverzeichnis gelöscht werden. - Die Plugin-Konfigurationsverzeichnisse unterstützen nur app.php für die Hauptkonfiguration des Plugins, bootstrap.php für die Prozessstartkonfiguration, route.php für die Routing-Konfiguration, middleware.php für die Middleware-Konfiguration, process.php für die benutzerdefinierte Prozesskonfiguration, database.php für die Datenbankkonfiguration, redis.php für die Redis-Konfiguration und thinkorm.php für die thinkorm-Konfiguration. Diese Konfigurationen werden automatisch von webman erkannt.
- Plugins nutzen folgende Methode zur Konfigurationsabfrage
config('plugin.Hersteller.Plugin-Name.Konfigurationsdatei.spezifische Konfigurationseinstellung');
, z.B.config('plugin.webman.push.app.app_key')
- Wenn das Plugin eigene Datenbankkonfigurationen hat, erfolgt der Zugriff wie folgt:
illuminate/database
istDb::connection('plugin.Hersteller.Plugin-Name.spezifische Verbindung')
,thinkrom
istDb::connct('plugin.Hersteller.Plugin-Name.spezifische Verbindung')
- Wenn das Plugin Geschäftsdateien im
app/
-Verzeichnis ablegen muss, ist sicherzustellen, dass es nicht mit Benutzerprojekten oder anderen Plugins in Konflikt steht. - Plugins sollten nach Möglichkeit vermeiden, Dateien oder Verzeichnisse in das Hauptprojekt zu kopieren; beispielsweise sollten die Middleware-Dateien eines Cross-Domain-Plugins lediglich unter
vendor/webman/cros/src
abgelegt werden und nicht in das Hauptprojekt kopiert werden. - Die Namensräume der Plugins sollten großgeschrieben werden, z.B. Webman/Console.
Beispiel
Installation des webman/console
-Befehls
composer require webman/console
Erstellen eines Plugins
Angenommen, das zu erstellende Plugin heißt foo/admin
(der Name ist auch der Projektname, der später auf composer veröffentlicht wird und muss in Kleinbuchstaben sein). Führen Sie den Befehl aus:
php webman plugin:create --name=foo/admin
Nach der Erstellung des Plugins wird das Verzeichnis vendor/foo/admin
für die Speicherung der relevanten Plugin-Dateien und config/plugin/foo/admin
für die Speicherung der relevanten Plugin-Konfigurationen erstellt.
Hinweis
config/plugin/foo/admin
unterstützt folgende Konfigurationen: app.php für die Hauptkonfiguration des Plugins, bootstrap.php für die Prozessstartkonfiguration, route.php für die Routing-Konfiguration, middleware.php für die Middleware-Konfiguration, process.php für die benutzerdefinierte Prozesskonfiguration, database.php für die Datenbankkonfiguration, redis.php für die Redis-Konfiguration und thinkorm.php für die thinkorm-Konfiguration. Das Konfigurationsformat ist identisch mit dem von webman, diese Konfigurationen werden automatisch von webman erkannt und in die Konfiguration integriert.
Um auf diese zuzugreifen, verwenden Sieplugin
als Präfix, z.B.config('plugin.foo.admin.app');
Exportieren des Plugins
Nachdem wir das Plugin entwickelt haben, führen wir den folgenden Befehl aus, um das Plugin zu exportieren:
php webman plugin:export --name=foo/admin
Exportieren
Beschreibung
Nach dem Export wird das Verzeichnis config/plugin/foo/admin in vendor/foo/admin/src kopiert, gleichzeitig wird automatisch eine Install.php generiert, die für die automatische Installation und Deinstallation verwendet wird, um einige Operationen auszuführen.
Die Standardaktion bei der Installation besteht darin, die Konfiguration aus vendor/foo/admin/src in das aktuelle Projekt unter config/plugin zu kopieren.
Bei der Entfernung besteht die Standardaktion darin, die Konfigurationsdateien im aktuellen Projekt unter config/plugin zu löschen.
Sie können Install.php anpassen, um bestimmte benutzerdefinierte Operationen bei der Installation und Deinstallation des Plugins durchzuführen.
Einreichen des Plugins
- Angenommen, Sie haben bereits ein Konto bei github und packagist
- Erstellen Sie ein admin-Projekt auf github und laden Sie den Code hoch. Die Projektadresse sei
https://github.com/IhrBenutzername/admin
- Gehen Sie zu
https://github.com/IhrBenutzername/admin/releases/new
, um einen Release wiev1.0.0
zu veröffentlichen. - Gehen Sie zu packagist und klicken Sie in der Navigation auf
Submit
, um die Adresse Ihres github-Projektshttps://github.com/IhrBenutzername/admin
einzureichen. Damit haben Sie die Veröffentlichung eines Plugins abgeschlossen.
Hinweis
Falls beim Einreichen des Plugins inpackagist
ein Konflikt in den Namen auftritt, können Sie einen neuen Herstellernamen verwenden, z.B.foo/admin
inmyfoo/admin
ändern.
Wenn Ihre Plugin-Projektdateien aktualisiert werden, müssen Sie den Code mit github synchronisieren und erneut zu https://github.com/IhrBenutzername/admin/releases/new
gehen, um einen neuen Release zu veröffentlichen. Danach gehen Sie zur Seite https://packagist.org/packages/foo/admin
und klicken auf die Schaltfläche Update
, um die Version zu aktualisieren.
Hinzufügen von Befehlen zu Plugins
Manchmal benötigen unsere Plugins einige benutzerdefinierte Befehle zur Bereitstellung zusätzlicher Funktionen. Zum Beispiel wird nach der Installation des webman/redis-queue
-Plugins automatisch ein Befehl redis-queue:consumer
zum Projekt hinzugefügt. Benutzer können einfach php webman redis-queue:consumer send-mail
ausführen, um eine SendMail.php-Verbraucherklasse im Projekt zu generieren, was die schnelle Entwicklung erleichtert.
Angenommen, das foo/admin
-Plugin muss einen foo-admin:add
-Befehl hinzufügen. Befolgen Sie die folgenden Schritte.
Neuen Befehl erstellen
Neues Befehlsdatei vendor/foo/admin/src/FooAdminAddCommand.php
<?php
namespace Foo\Admin;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class FooAdminAddCommand extends Command
{
protected static $defaultName = 'foo-admin:add';
protected static $defaultDescription = 'Hier ist die Beschreibung des Befehls';
/**
* @return void
*/
protected function configure()
{
$this->addArgument('name', InputArgument::REQUIRED, 'Name hinzufügen');
}
/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
$output->writeln("Admin add $name");
return self::SUCCESS;
}
}
Hinweis
Um Konflikte zwischen den Befehlen von Plugins zu vermeiden, wird empfohlen, das Befehlsformat alsHersteller-Plugin-Name:konkreter Befehl
zu wählen, z.B. sollten alle Befehle desfoo/admin
-Plugins mit dem Präfixfoo-admin:
beginnen, z.B.foo-admin:add
.
Konfiguration hinzufügen
Neue Konfiguration config/plugin/foo/admin/command.php
erstellen
<?php
use Foo\Admin\FooAdminAddCommand;
return [
FooAdminAddCommand::class,
// ....mehrere Konfigurationen können hinzugefügt werden...
];
Hinweis
command.php
dient zur Konfiguration benutzerdefinierter Befehle für das Plugin. Jedes Element im Array entspricht einer Befehlsklassen-Datei, jede Klassen-Datei entspricht einem Befehl. Wenn ein Benutzer den Befehl ausführt, lädtwebman/console
automatisch die benutzerdefinierten Befehle aus dercommand.php
jedes Plugins. Wenn Sie mehr über die Befehlszeilen erfahren möchten, lesen Sie bitte Befehlszeile.
Exportbefehl ausführen
Führen Sie den Befehl php webman plugin:export --name=foo/admin
aus, um das Plugin zu exportieren und bei packagist
einzureichen. So wird nach der Installation des foo/admin
-Plugins ein Befehl foo-admin:add
hinzugefügt. Der Befehl php webman foo-admin:add jerry
gibt Admin add jerry
aus.