Ein Plugin schreiben¶
Ein Plugin wird im Kontext der Platform ausgeführt und erweitert den Funktionsumfang der Anwendung. In diesem Beispiel soll ein einfaches Plugin erstellt und deployed werden.
Voraussetzungen für die Entwicklung eines Plugins sind neben diesem SDK, die Docker-Container für die Anwendung und die Datenbank.
Ausserdem muss das Werkzeug docker-compose, installiert sein.
Grundstruktur erstellen¶
Mit dem Script init-plugin.sh legen wir die Grundstruktur für das neue Plugin an. Hierzu führen wir folgendne Aufruf aus dem SDK-Verzeichnis aus:
mkdir ${HOME}/hello-world
./application/bin/init-plugin.sh --project-path=${HOME}/hello-world "Hello World" Hello_World
Soll das Repos über git
verwaltet werden, so kann man die Option --init-git
angeben.
Plugin entwickeln¶
Um ein Plugin entwickeln zu können, werden mit Hilfe des Scriptes start-plugin-dev.sh benötigt. Die unterschiedlichen Pfade des Plugins werden in den Container an die entsprechenden Stellen in der Anwendung eingebunden.
Aufbau und Struktur¶
Webdateien¶
Benötigt ein Plugin Webdateien (Javascript, CSS) so werden diese im web
Verzeichnis des Plugins ausgeliefert.
Bei der Installation werden diese Dateien nach web/vendor/plugins/<name>
kopiert.
Routen¶
Die Routen müssen im Verzeichnis default/route
liegen und werden bei der Installation nach
config/route/plugins/<name>
kopiert.
Konfiguration¶
Die Konfigurationsdatei heisst default/component.properties
. Die Konfiguration im System erfolgt
über die Datei config/<name>/components.properties
.
Component-Klasse¶
Die Komponentenklasse bildet die zentrale Verwaltung eines Plugins.
Abhängigkeiten werden über die Methode Component::initEnvironmentRules
definiert.
In dem folgendem Beispiel wird definert, das dieses Plugin das PHP ZIP-Modul
benötigt.
protected function initEnvironmentRules(): \Alvine\Core\Component {
$this->ruleset
->add(new \Alvine\Util\Dependency\Rule\PhpModule('zip'));
return parent::initEnvironmentRules();
}
Über die Methode Component::install()
kann das Verhalten beim Installieren
definiert werden.
Die Methode Component::uninstall
legt das Verhalten beim Löschen eines Plugins fest.
In diesem Beispiel werden die Web-Assets (Javascript, CSS-Dateien) kopiert und die Route eingetragen.
public function install(): \Alvine\Application\Platform\Plugin\Component {
return $this->copyRouting()
->copyWebAssets();
}
Die Methode Component::uninstall
legt das Verhalten beim Löschen eines Plugins fest.
In diesem Beispiel werden die Web-Assets (Javascript, CSS-Dateien) gelöscht und die Route entfernt.
public function uninstall(): \Alvine\Application\Platform\Plugin\Component {
return $this->removeRouting()
->removeWebAssets();
}