NAME
Mojolicious::Plugin::BModel - Catalyst-like models in Mojolicious
SYNOPSIS
# Mojolicious
# in your app:
sub
startup {
my
$self
=
shift
;
$self
->plugin(
'BModel'
, {
%Options
} );
}
# in controller:
sub
my_controller {
my
$self
=
shift
;
my
$config_data
=
$self
->model(
'MyModel'
)->get_conf_data(
'field'
);
}
# in <your_app>/lib/<namespace>/Model/MyModel.pm:
sub
get_conf_data {
my
(
$self
,
$field
) =
@_
;
# as example
return
$self
->config->{field};
}
DESCRIPTION
This module provides you an ability to separate a business-logic from controllers into a
'model'
class
This approach is using in the L<Catalyst framework|https://metacpan.org/pod/Catalyst>.
All model classes have to be inherited from the class
'Mojolicious::BModel::Base'
, examples see below.
This module works in Unix-like and Windows systems.
Options
- create_dir
-
A boolean flag that determines automatically create the folder
'<yourapp>/lib/<namespace>/Model'
if
it does not exist. 0 -
do
not create, 1 - create. Enabled by
default
- namespace
-
A place in the
'/lib'
folder of application where there are your model classes. By
default
it is the name of application.
The value of this parameter should be in the
format
with
a delimiter
'::'
,
for
example
'Aaaaa::Bbbb::Cccc'
.
This string(in
format
'Aaaaa::Bbbb::Cccc'
) will be converted to the path
'Aaaaa/Bbbb/Cccc'
(or
'Aaaaa\Bbbb\Cccc'
for
Microsoft Windows) and the absolute path to the your Model dir will looks like
'<your app>/lib/Aaaaa/Bbbb/Cccc/Model'
and all Model classes will be sought in this direcory.
EXAMPLE
# the example of a new application:
% cpan install Mojolicious::Plugin::BModel
% mojo generate app MyApp
% cd my_app/
% vim lib/MyApp.pm
# edit file:
package
MyApp;
sub
startup {
my
$self
=
shift
;
$self
->config->{testkey} =
'MyTestValue'
;
$self
->plugin(
'BModel'
);
# used the default options
my
$r
=
$self
->routes;
$r
->get(
'/'
)->to(
'root#index'
);
}
1;
# end of edit file
# create a new controller
% touch lib/Controller/Root.pm
% vim lib/Controller/Root.pm
# edit file
package
MyApp::Controller::Root;
sub
index
{
my
$self
=
shift
;
my
$testkey_val
=
$self
->model(
'MyModel'
)->get_conf_key(
'testkey'
);
$self
->render(
text
=>
'Value: '
.
$testkey_val
);
}
1;
# end of edit file
# When you connect, the plugin will check the folder "lib/MyApp/Model" exists.
# By defaut the namespace 'MyApp' will be used.
# If the folder 'lib/MyApp/Model' does not exist, this will be created.
# The method 'app' of base model contains a link to your application.
# The method 'config' of base model contains a link to config of yor application.
# create a new model
% touch lib/MyApp/Model/MyModel.pm
% vim lib/MyApp/Model/MyModel.pm
# edit file
package
MyApp::Model::MyModel;
use
strict;
use
warnings;
sub
get_conf_key {
my
(
$self
,
$key
) =
@_
;
return
$self
->config->{
$key
} ||
''
;
}
1;
# end of edit file
% morbo -v script/my_app
# Open in your browser address http://127.0.0.1:3000 and
# you'll see text 'Value: MyTestValue'
LICENSE
Copyright (C) 2015-2017 Alexander Ruzhnikov.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
AUTHOR
Alexander Ruzhnikov <ruzhnikov85@gmail.com>