Plugin-Anwendung
Jedes Applikations-Plugin ist eine vollständige Applikation, deren Quellcode im Verzeichnis {Hauptprojekt}/plugin
liegt.
Hinweis
Mit dem Befehlphp webman app-plugin:create {Plugin-Name}
(webman/console>=1.2.16 erforderlich) können Sie lokal ein Applikations-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 Applikations-Plugin die gleiche Verzeichnisstruktur und Konfigurationsdateien wie webman hat. Tatsächlich ist die Entwicklung eines Applikations-Plugins im Wesentlichen das gleiche wie die Entwicklung eines webman-Projekts. Es gibt jedoch einige Aspekte zu beachten.
Namensraum
Das Plugin-Verzeichnis und -Namen folgen dem PSR4-Standard. Da die Plugins im Plugin-Verzeichnis platziert sind, beginnen die Namensräume alle mit plugin
, z.B. plugin\cms\app\controller\UserController
. Hier ist cms
das Hauptverzeichnis des Plugin-Quellcodes.
URL-Zugriff
Die URL-Adressen der Applikations-Plugins beginnen alle mit /app
. Zum Beispiel ist die URL-Adresse von plugin\cms\app\controller\UserController
http://127.0.0.1:8787/app/cms/user
.
Statische Dateien
Statische Dateien befinden sich im Verzeichnis plugin/{Plugin}/public
. Wenn also auf http://127.0.0.1:8787/app/cms/avatar.png
zugegriffen wird, wird tatsächlich die Datei plugin/cms/public/avatar.png
abgerufen.
Konfigurationsdateien
Die Konfigurationen des Plugins sind genauso wie bei einem normalen webman-Projekt, jedoch betreffen die Plugin-Konfigurationen in der Regel nur das jeweilige Plugin und haben keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.app.controller_suffix
nur das Suffix des Controllers des Plugins und hat keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.app.controller_reuse
nur, ob der Controller des Plugins wiederverwendet wird, und hat keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.middleware
nur die Middleware des Plugins und hat keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.view
nur die vom Plugin verwendete Ansicht und hat keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.container
nur den vom Plugin verwendeten Container und hat keine Auswirkungen auf das Hauptprojekt.
Zum Beispiel betrifft der Wert von plugin.cms.exception
nur die Behandlungsklasse für Ausnahmen des Plugins und hat keine Auswirkungen auf das Hauptprojekt.
Da die Routen jedoch global sind, wirken sich die konfigurierten Routen von Plugins auch global aus.
Abrufen von Konfigurationen
Die Methode zum Abrufen einer Konfiguration eines Plugins lautet config('plugin.{Plugin}.{spezifische Konfiguration}');
. Zum Beispiel kann die gesamte Konfiguration von plugin/cms/config/app.php
mit config('plugin.cms.app')
abgerufen werden.
Ebenso können das Hauptprojekt oder andere Plugins config('plugin.cms.xxx')
verwenden, um die Konfiguration des CMS-Plugins abzurufen.
Nicht unterstützte Konfigurationen
Applikations-Plugins unterstützen keine server.php
, session.php
-Konfigurationen und unterstützen nicht die Konfigurationen app.request_class
, app.public_path
und app.runtime_path
.
Datenbank
Plugins können ihre eigene Datenbank konfigurieren. Zum Beispiel enthält plugin/cms/config/database.php
den folgenden Inhalt:
return [
'default' => 'mysql',
'connections' => [
'mysql' => [ // mysql ist der Verbindungsnamen
'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 Verbindungsnamen
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'Datenbank',
'username' => 'Benutzername',
'password' => 'Passwort',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_general_ci',
],
],
];
Der Verweis erfolgt mit Db::connection('plugin.{Plugin}.{Verbindungsnamen}');
, zum Beispiel
use support\Db;
Db::connection('plugin.cms.mysql')->table('user')->first();
Db::connection('plugin.cms.admin')->table('admin')->first();
Wenn die Hauptprojektdatenbank verwendet werden soll, kann sie direkt verwendet werden, zum Beispiel
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 ähnelt der Datenbankverwendung. 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,
],
];
Verwendung:
use support\Redis;
Redis::connection('plugin.cms.default')->get('key');
Redis::connection('plugin.cms.cache')->get('key');
Ebenso kann bei Bedarf die Redis-Konfiguration des Hauptprojekts wiederverwendet werden:
use support\Redis;
Redis::get('key');
// Angenommen, das Hauptprojekt hat auch eine Cache-Verbindung konfiguriert
Redis::connection('cache')->get('key');
Protokollierung
Die Verwendung des Protokolls ähnelt der Datenbankverwendung:
use support\Log;
Log::channel('plugin.admin.default')->info('test');
Wenn die Protokollkonfiguration des Hauptprojekts wiederverwendet werden soll, kann sie direkt verwendet werden:
use support\Log;
Log::info('Log-Eintrag');
// Angenommen, das Hauptprojekt hat eine Test-Protokollkonfiguration
Log::channel('test')->info('Log-Eintrag');
Installieren und Deinstallieren von Applikations-Plugins
Die Installation eines Applikations-Plugins erfolgt, indem das Plugin-Verzeichnis ins Verzeichnis {Hauptprojekt}/plugin
kopiert wird. Es ist erforderlich, reload
oder restart
auszuführen, um die Änderungen wirksam werden zu lassen.
Zum Deinstallieren reicht es aus, das entsprechende Plugin-Verzeichnis im Verzeichnis {Hauptprojekt}/plugin
zu löschen.