Schnelleinstieg: Den ersten Dienst anmelden und abrufen
Der kürzeste Weg von „Plugin ist installiert“ zu „ein eigener Dienst steht in der Registry und wird von anderer Stelle gefunden“. Drei Schritte, etwa fünfzehn Minuten. Diese Anleitung richtet sich an Entwickler eigener Plugins.
Voraussetzungen
wkcoreist installiert und im Erweiterungsmanager aktiviert.- Ein eigenes Plugin mit einer Aktions-Komponente (
action.php), oder eine Stelle, an der Sie eine anlegen können. - PHP 8.2 oder neuer.
- Für Schritt 3 (Prüfung): Sie dürfen
conf/local.phpändern.
Schritt 1: Am Registrierungsereignis anmelden
WKCORE_REGISTER_SERVICES ist der einzige Zeitpunkt, zu dem die Registry beschrieben werden soll.
use dokuwiki\Extension\ActionPlugin; use dokuwiki\Extension\Event; use dokuwiki\Extension\EventHandler; class action_plugin_meinplugin extends ActionPlugin { public function register(EventHandler $controller) { $controller->register_hook('WKCORE_REGISTER_SERVICES', 'BEFORE', $this, 'onRegisterServices'); } public function onRegisterServices(Event $event) { $registry = $event->data; $registry->register('meinplugin.gruss', new Gruss()); } }
Wählen Sie eine Kennung, die mit dem Namen Ihres Plugins beginnt. Kennungen sind ein flacher Namensraum ohne Kollisionsprüfung; das Präfix ist das Einzige, was zwei Plugins auseinanderhält.
Ist der Dienst teuer zu bauen oder nur selten nötig, melden Sie stattdessen eine Fabrik an. Sie läuft beim ersten get() und danach nie wieder:
$registry->registerFactory('meinplugin.bericht', static function () { return new TeurerBericht(); });
Schritt 2: Ihn von anderer Stelle abrufen
Über DokuWikis Plugin-Lader, nicht durch Import der Klassen von wkcore:
$core = plugin_load('helper', 'wkcore'); if (is_object($core) && method_exists($core, 'get')) { $gruss = $core->get('meinplugin.gruss'); if ($gruss !== null) { echo $gruss->sagHallo(); } }
Die beiden Prüfungen sind Hausbrauch und verdienen ihren Platz: Ihr Plugin lädt weiter, wenn wkcore fehlt, und arbeitet weiter, wenn ein erwarteter Dienst nie angemeldet wurde. Keiner der beiden Fälle rechtfertigt einen Abbruch.
Schritt 3: Nachsehen, was angemeldet ist
allowdebug nicht gesetzt ist — sie meldet dann nur wkcore diagnostics require $conf['allowdebug'] = 1. Setzen Sie in conf/local.php:$conf['allowdebug'] = 1;
und nehmen Sie die Zeile nach der Prüfung wieder heraus. Die Ansicht legt Innereien der Installation offen.
Öffnen Sie danach /doku.php?do=wkcore_diag.
Ergebnis prüfen
Die Ansicht führt jede angemeldete Kennung auf, dazu ob sie ein Wert oder eine Fabrik ist und ob eine Fabrik in diesem Aufruf bereits aufgelöst wurde.
meinplugin.grusssteht als Wert darin.meinplugin.berichtsteht als noch nicht aufgelöste Fabrik darin. Rufen Sieget('meinplugin.bericht')einmal auf und laden Sie neu: Jetzt ist sie aufgelöst.
Genau dafür ist die Ansicht da: Eine falsch geschriebene Kennung ist nirgends ein Fehler — sie ist ein null aus get(). Hier sehen Sie, wie sie wirklich heißt.