10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MojoliciousAdvent Calendar 2013

Day 19

bridgeを活用する

Last updated at Posted at 2013-12-19

MojoliciousのRoutingの中に「 bridge 」というモノのがあります。共通で使うアクションをコントローラの一つのメソッドにしてそこを一度経由してから他のコントローラ処理を行うことが出来ます。主なユースケースとしてユーザー認証などが考えられるでしょう。では使ってみます。Mojolicious を継承した MyApp.pm は以下のようになります。

lib/MyApp.pm
package MyApp;
use Mojo::Base 'Mojolicious';

sub startup {
    my $self = shift;
    my $r = $self->routes;
    my $logged_in = $r->bridge->to('root#login');
    $logged_in->get('/')->to('root#index');
}

1;

ここではログイン処理をするようなアクションを MyApp::Rootloginメソッド で定義するとしています。Routeオブジェクトを $logged_in という変数で保持しつつ / パスへのアクセスは MyApp::Rootindexメソッド へ通しています。

ではコントローラ。

lib/MyApp/Root.pm
package MyApp::Root;
use Mojo::Base 'Mojolicious::Controller';

sub index {
    my $self = shift;
    $self->render(text => 'You are logged-in!');
}

sub login {
    my $self = shift;
    my $password = $self->param('password');
    return 1 if $password && $password eq 'password';
    $self->render( text => 'Your password is "password"' );
    return undef;
}

1;

肝心なのは loginメソッド でパスワードが合っているか?どうかの判断をしたあと。 真値を返す ことでbridgeで定義した次のアクションである indexメソッド に移ります。逆に 偽を返した 時には処理はそこで終わります。この場合だと Your password is "password" とテキストを表示するにとどまります。

「真偽を判断してbrigedの次のアクションへ行く」ことを把握していればbridgeは便利でしょうね!

なお、ただいま絶賛、料理の途中なので飯写真はありません

10
10
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
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?