LoginSignup
4
4

More than 5 years have passed since last update.

Mojo::Baseをベースクラスとして使う

Last updated at Posted at 2013-11-12

使い方

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;
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4