使い方
Mojo::Baseを継承すると、hasメソッドがインポートされ、アクセサを作成できるようになります。
MyModule.pm
package MyModule;
use Mojo::Base -base;
has 'username';
has 'password';
1;
他のモジュールを継承するときにもMojo::Baseが使えます。
Dog.pm
package Dog;
use Mojo::Base 'Animal'; # Animalクラスを継承する
1;
Mojo::Baseを継承すると、
「strict」「warnigs」「utf8」「feature '5.10'」プラグマが有効になります。
hasメソッドは、以下のように使用できます。
Sample.pm
# 単純に作成
has 'username';
# デフォルト文字列を設定
has 'username' => 'hoge';
# 文字列以外のデフォルト値を設定(関数リファレンスを使います)
has 'list' => sub { return [0, 1, 2, 3] };
newなどでインスタンスを作成しないPackageを定義するときは、以下のように記述できます。
MyModule.pm
package MyModule;
use Mojo::Base -strict;
1;
この場合、プラグマは有効になりますが、hasメソッドはインポートされません。
Mojoliciousでの使われ方
Mojo::Baseは、Mojolicious内のすべてのクラスの親クラスとなっています。
例えばMojolicious::Controllerの中で、hasメソッドを使うことができます。
Sample.pm
package MyApp::Sample;
use Mojo::Base 'Mojolicious::Controller';
use Model::User;
has 'User' => sub { Model::User->new };
sub index {
my $self = shift;
$self->stash->{users} = $self->User->list();
$self->render();
}
sub delete {
my $self = shift;
$self->Users->delete_by_id($self->param('id'));
$self->redirect_to('user/list');
}
1;