Grundlegende Plugin-Generierung und Veröffentlichungsprozess

Prinzip

  1. 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.
  2. Wir verwenden einen Befehl, um die drei Dateien zu packen und auf composer zu veröffentlichen.
  3. 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.
  4. 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

  1. Der Plugin-Name besteht aus zwei Teilen, Hersteller und Plugin-Name, z.B. webman/push, dies entspricht dem composer-Paketnamen.
  2. 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.
  3. 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.
  4. Plugins nutzen folgende Methode zur Konfigurationsabfrage config('plugin.Hersteller.Plugin-Name.Konfigurationsdatei.spezifische Konfigurationseinstellung');, z.B. config('plugin.webman.push.app.app_key')
  5. Wenn das Plugin eigene Datenbankkonfigurationen hat, erfolgt der Zugriff wie folgt: illuminate/database ist Db::connection('plugin.Hersteller.Plugin-Name.spezifische Verbindung'), thinkrom ist Db::connct('plugin.Hersteller.Plugin-Name.spezifische Verbindung')
  6. Wenn das Plugin Geschäftsdateien im app/-Verzeichnis ablegen muss, ist sicherzustellen, dass es nicht mit Benutzerprojekten oder anderen Plugins in Konflikt steht.
  7. 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.
  8. 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 Sie plugin 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 wie v1.0.0 zu veröffentlichen.
  • Gehen Sie zu packagist und klicken Sie in der Navigation auf Submit, um die Adresse Ihres github-Projekts https://github.com/IhrBenutzername/admin einzureichen. Damit haben Sie die Veröffentlichung eines Plugins abgeschlossen.

Hinweis
Falls beim Einreichen des Plugins in packagist ein Konflikt in den Namen auftritt, können Sie einen neuen Herstellernamen verwenden, z.B. foo/admin in myfoo/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 als Hersteller-Plugin-Name:konkreter Befehl zu wählen, z.B. sollten alle Befehle des foo/admin-Plugins mit dem Präfix foo-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ädt webman/console automatisch die benutzerdefinierten Befehle aus der command.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.