ルーティング
デフォルトルーティング
sub startup {
my $r = $self->routes;
$r->route('/:x/:y')->to('test#index', id => 1);
}
package MyApp:Test;
sub index {
$self->stash->{x}; # foo
$self->stash->{y}; # bar
$self->stash->{id}; # 1
}
- 以上の場合、route()で2つのパスを持つ引数を指定している(xやyは後述のようにメソッド内での変数名になる)ので、http://localhost:3000/foo/barのようなURLを受け付ける。
- ルーティング設定を元にMyApp::Testクラスのindexメソッドが実行される。
- メソッド内ではstashの中にxやyをキー名にしてURLで指定したパスが値として入っている。
bridge()を使ってアクセス制御
sub startup {
my $r = $self->routes;
$r->route('/')->to('top#index');
$r->route('/login')->to('login#index');
my $default = $r->bridge()->to('admin#auth');
$default->route('/blog')->to('blog#index');
$default->route('/blog/edit')->to('blog#edit');
}
package MyApp:Admin
sub auth {
my $self = shift;
if (is_loggedin) {
return 1;
} else {
$self->redirect_to('/login');
return;
}
}