NAME
Nile::Plugin - Plugin base class for the Nile framework.
SYNOPSIS
DESCRIPTION
Nile::Plugin - Plugin base class for the Nile framework.
This module is the base class for plugins. You include it by using it which also makes itself as a parent class for the plugin and inherts the method setting which has the plugin setting loaded automatically from the config files.
Creating your first plugin Hello
is simple like that, just create a module file called Hello.pm
in the folder Nile/Plugin
and put the following code in it:
package Nile::Plugin::Hello;
our $VERSION = '0.55';
# this also extends Nile::Plugin, the plugin base class
use Nile::Plugin;
# optional our alternative for sub new {} called automaticall on object creation
sub main {
my ($self, $arg) = @_;
# plugin settings from config files section
my $setting = $self->setting();
#same as
#my $setting = $self->setting("hello");
# get app context
my $app = $self->app;
# good to setup hooks here
# run this hook after the "start" method
$app->hook->after_start( sub {
my ($me, @args) = @_;
#...
});
}
sub welcome {
my ($self) = @_;
return "Hello world";
}
1;
Then inside other modules or plugins you can access this plugin as
# get the plugin object
$hello = $app->plugin->hello;
# or
$hello = $app->plugin("Hello");
# if plugin name has sub modules
my $redis = $app->plugin("Cache::Redis");
# call plugin method
say $app->plugin->hello->welcome;
# in general, you access plugins like this:
$app->plugin->your_plugin_name->your_plugin_method([args]);
Plugins will be loaded automatically on the first time it is used and can be load on application startup in the init
method:
$app->init({
plugin => [ qw(hello) ],
});
Plugins also can be loaded on application startup by setting the autoload
variable in the plugin configuration in the config files.
Example of plugin configuration to auto load on application startup:
<plugin>
<hello>
<autoload>1</autoload>
</hello>
</plugin>
At the plugin load, the plugin optional method main
will be called automatically if it exists, this is an alternative for the method new
.
Inside the plugin methods, you access the application context by the injected method app
and you use it in this way:
my $app = $self->app;
$app->request->param("name");
...
$app->config->get("email");
Plugins that setup hooks
must be set to autoload on startup for hooks to work as expected.
setting()
# inside plugin classes, return current plugin class config settings
my $setting = $self->setting();
my %setting = $self->setting();
#
# inside plugin classes, return specific plugin class config settings
my $setting = $self->setting("email");
my %setting = $self->setting("email");
Returns plugin class settings from configuration files loaded.
Helper plugin settings in config files must be in inside the plugin tag. The plugin class name can be lower case tag, so plugin Email
can be email
.
Exampler settings for email
and cache
plugins class below:
<plugin>
<email>
<transport>Sendmail</transport>
<sendmail>/usr/sbin/sendmail</sendmail>
</email>
<cache>
<autoload>1</autoload>
</cache>
</plugin>
Bugs
This project is available on github at https://github.com/mewsoft/Nile.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Nile.
SOURCE
Source repository is at https://github.com/mewsoft/Nile.
SEE ALSO
See Nile for details about the complete framework.
AUTHOR
Ahmed Amin Elsheshtawy, احمد امين الششتاوى <mewsoft@cpan.org> Website: http://www.mewsoft.com
COPYRIGHT AND LICENSE
Copyright (C) 2014-2015 by Dr. Ahmed Amin Elsheshtawy احمد امين الششتاوى mewsoft@cpan.org, support@mewsoft.com, https://github.com/mewsoft/Nile, http://www.mewsoft.com
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.