Über die Plugin-Schnittstelle kann Mojolicious oder eine
Mojolicious-Applikation um jede denkbare Funktionalität erweitert
werden. Die Plugin-Schnittstelle ist sehr einfach gehalten. Denn sie
gibt nur vor, wie eine Funktionalität zum System hinzugefügt wird,
nicht jedoch, um welche Art von Funktionalität es sich handelt.
Die Implementierung eines Mojolicious-Plugin erfolgt in zwei
Schritten:
-
Durch Ableitung von
Mojolicious::Plugin
wird eine Subklasse - die Plugin-Klasse - gebildet.
-
In der Plugin-Klasse wird die Methode register() implementiert.
In der Dokumentation zur Basisklasse Mojolicious::Plugin wird die
Implementierung so beschrieben:
package Mojolicious::Plugin::MyPlugin;
use Mojo::Base 'Mojolicious::Plugin';
sub register {
my ($self, $app, $conf) = @_;
# Magic here! :)
}
Der Aufwand der Plugin-Implementierung besteht natürlich darin,
den mit
bezeichneten Teil mit Leben zu füllen.
Ist das Plugin implementiert, wird es durch einen einzigen Aufruf zur
Applikation hinzugefügt:
$app->plugin(MyPlugin => \%config);
Der analoge Aufruf unter
Mojolicious::Lite:
plugin MyPlugin => \%config;
Hierbei ist %config ein Hash mit Schlüssel/Wert-Paaren -
typischerweise als Hash-Literal angegeben - durch den das Plugin
konfiguriert wird. Ist keine Konfigurierung des Plugin nötig,
kann das Argument weggelassen werden.
Beispiel
Als einfaches Beispiel implementieren wir ein Plugin Hello, das bei
jedem hereinkommenden Request die Zeichenkette 'Hello' und die
IP-Adresse des Aufrufers ins Log ausgibt. Dies erreichen wir, indem
wir in der Methode register() einen before_routes-Handler
aufsetzen, der genau dies tut.
package Mojolicious::Plugin::Hello;
Mojo::Base 'Mojolicious::Plugin';
sub register {
my ($self, $app, $conf) = @_;
$app->hook(before_routes=>sub {
my $c = shift;
$c->app->log->debug('Hello '.$c->tx->remote_address);
});
return;
}
Das Plugin wird durch
oder im Falle von Mojolicious::Lite durch
in der Applikation aktiviert. Eine Konfiguration ist bei den Aufrufen
nicht angegeben, da das Plugin keine Konfigurierungsmöglichkeit
vorsieht.
Links zu Mojolicious