Anwendungs-Plugins
Jedes Anwendungs-Plugin ist eine vollständige Anwendung, deren Quellcode im Verzeichnis {Hauptprojekt}/plugin
abgelegt ist.
Hinweis
Mit dem Befehlphp webman app-plugin:create {Plugin-Name}
können Sie lokal ein Anwendungs-Plugin erstellen.
Zum Beispiel erstelltphp 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
.