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();
}