Anwendungs-Plugins

Jedes Anwendungs-Plugin ist eine vollständige Anwendung, deren Quellcode im Verzeichnis {Hauptprojekt}/plugin abgelegt ist.

Hinweis
Mit dem Befehl php webman app-plugin:create {Plugin-Name} können Sie lokal ein Anwendungs-Plugin erstellen.
Zum Beispiel erstellt php webman app-plugin:create cms die folgende Verzeichnisstruktur:

plugin/
└── cms
    ├── app
    │   ├── controller
    │   │   └── IndexController.php
    │   ├── exception
    │   │   └── Handler.php
    │   ├── functions.php
    │   ├── middleware
    │   ├── model
    │   └── view
    │       └── index
    │           └── index.html
    ├── config
    │   ├── app.php
    │   ├── autoload.php
    │   ├── container.php
    │   ├── database.php
    │   ├── exception.php
    │   ├── log.php
    │   ├── middleware.php
    │   ├── process.php
    │   ├── redis.php
    │   ├── route.php
    │   ├── static.php
    │   ├── thinkorm.php
    │   ├── translation.php
    │   └── view.php
    └── public

Wir sehen, dass ein Anwendungs-Plugin die gleiche Verzeichnisstruktur und Konfigurationsdateien wie Webman hat. Tatsächlich ist die Entwicklung eines Anwendungs-Plugins eine ähnliche Erfahrung wie die Entwicklung eines Webman-Projekts, man muss jedoch die folgenden Aspekte beachten.

Namespaces

Die Verzeichnisse und Benennungen des Plugins folgen den PSR-4-Richtlinien. Da die Plugins im Verzeichnis plugin abgelegt sind, beginnen alle Namespaces mit plugin, z. B. plugin\cms\app\controller\UserController, wobei cms das Hauptverzeichnis des Plugin-Quellcodes ist.

URL-Zugriff

Die URL-Pfade der Anwendungs-Plugins beginnen alle mit /app, zum Beispiel ist die URL für plugin\cms\app\controller\UserController http://127.0.0.1:8787/app/cms/user.

Statische Dateien

Statische Dateien werden im Verzeichnis plugin/{plugin}/public abgelegt, zum Beispiel wird der Zugriff auf http://127.0.0.1:8787/app/cms/avatar.png tatsächlich die Datei plugin/cms/public/avatar.png abrufen.

Konfigurationsdateien

Die Konfigurationen des Plugins sind ähnlich wie die eines gewöhnlichen Webman-Projekts, jedoch sind die Plugin-Konfigurationen in der Regel nur für das aktuelle Plugin wirksam und haben keinen Einfluss auf das Hauptprojekt.
Zum Beispiel hat der Wert von plugin.cms.app.controller_suffix nur Auswirkungen auf die Controller-Suffixe des Plugins und keinen Einfluss auf das Hauptprojekt.
Der Wert von plugin.cms.app.controller_reuse beeinflusst nur, ob das Plugin die Controller wiederverwendet, ohne das Hauptprojekt zu beeinträchtigen.
Der Wert von plugin.cms.middleware hat nur Einfluss auf die Middleware des Plugins und betrifft das Hauptprojekt nicht.
Der Wert von plugin.cms.view wirkt sich nur auf die im Plugin verwendeten Ansichten aus, nicht auf das Hauptprojekt.
Der Wert von plugin.cms.container beeinflusst nur den Container, der vom Plugin verwendet wird, nicht das Hauptprojekt.
Der Wert von plugin.cms.exception hat nur Einfluss auf die Ausnahmebehandlungsstruktur des Plugins, ohne das Hauptprojekt zu berühren.

Da die Routen jedoch global sind, beeinflussen die konfigurierten Routen des Plugins auch global.

Konfiguration abrufen

Um die Konfiguration eines Plugins abzurufen, verwenden Sie die Methode config('plugin.{plugin}.{konkrete Konfiguration}');, zum Beispiel wird die Abrufung aller Konfigurationen von plugin/cms/config/app.php durch config('plugin.cms.app') ermöglicht.
Ebenso können das Hauptprojekt oder andere Plugins config('plugin.cms.xxx') verwenden, um die Konfiguration des cms-Plugins abzurufen.

Nicht unterstützte Konfigurationen

Anwendungs-Plugins unterstützen keine Konfigurationen für server.php und session.php, ebenso wenig wie app.request_class, app.public_path und app.runtime_path.

Datenbank

Plugins können ihre eigene Datenbank konfigurieren, zum Beispiel hat plugin/cms/config/database.php den folgenden Inhalt:

return  [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [ // mysql ist der Verbindungsname
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'Datenbank',
            'username'    => 'Benutzername',
            'password'    => 'Passwort',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
        'admin' => [ // admin ist der Verbindungsname
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'Datenbank',
            'username'    => 'Benutzername',
            'password'    => 'Passwort',
            'charset'     => 'utf8mb4',
            'collation'   => 'utf8mb4_general_ci',
        ],
    ],
];

Der Verweis erfolgt über Db::connection('plugin.{plugin}.{verbindungsname}');, zum Beispiel:

use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();

Wenn Sie die Datenbank des Hauptprojekts verwenden möchten, verwenden Sie einfach:

use support\Db;
Db::table('user')->first();
// Angenommen, das Hauptprojekt hat auch eine admin-Verbindung konfiguriert
Db::connection('admin')->table('admin')->first();

Hinweis
thinkorm hat eine ähnliche Verwendung.

Redis

Die Verwendung von Redis ist ähnlich wie die der Datenbank, zum Beispiel in plugin/cms/config/redis.php:

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 1,
    ],
];

Die Verwendung erfolgt mit:

use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');

Ebenso wenn Sie die Redis-Konfiguration des Hauptprojekts wiederverwenden möchten:

use support\Redis;
Redis::get('key');
// Angenommen, das Hauptprojekt hat auch eine cache-Verbindung konfiguriert
Redis::connection('cache')->get('key');

Protokollierung

Die Verwendung der Protokollierungsklasse ähnelt ebenfalls der Datenbankverwendung:

use support\Log;
Log::channel('plugin.admin.default')->info('test');

Wenn Sie die Protokollierungskonfiguration des Hauptprojekts wiederverwenden möchten, verwenden Sie einfach:

use support\Log;
Log::info('Protokollinhalt');
// Angenommen, das Hauptprojekt hat eine konfiguriert, die test-Protokollierung 
Log::channel('test')->info('Protokollinhalt');

Installation und Deinstallation von Anwendungs-Plugins

Um ein Anwendungs-Plugin zu installieren, müssen Sie lediglich das Plugin-Verzeichnis in das Verzeichnis {Hauptprojekt}/plugin kopieren. Ein reload oder restart ist erforderlich, damit die Änderung wirksam wird.
Zur Deinstallation löschen Sie einfach das entsprechende Plugin-Verzeichnis im {Hauptprojekt}/plugin.