• 追加された行はこの色です。
  • 削除された行はこの色です。
* ルーティング [#k72c01bb]

** デフォルトルーティング [#u743da58]


 sub startup {
   $r->route('/:x/:y')->to('test#index', id => 1);
    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
    $self->stash->{x};  # foo
    $self->stash->{y};  # bar
    $self->stash->{id}; # 1
 }

- 以上の場合、route()で2つのパスを持つ引数を指定しているので、http://localhost:3000/foo/barのようなURLを受け付ける。
-- もし、http://localhost:3000/foo/bar/bazのようなURLを受け付けるには、route('/:a/:b/:c')と指定する必要がある。
- そして、コントローラにより、MyApp::Testクラスのindexメソッドが実行される。
- メソッド内ではstashの中にURLで指定したパスが入っている。
- 以上の場合、route()で2つのパスを持つ引数を指定している(xやyは後述のようにメソッド内での変数名になる)ので、http://localhost:3000/foo/barのようなURLを受け付ける。
-- もし、http://localhost:3000/foo/bar/bazのようなURLを受け付けるには、route('/:a/:b/:c')のように指定する必要がある。
- ルーティング設定を元にMyApp::Testクラスのindexメソッドが実行される。
- メソッド内ではstashの中にxやyをキー名にしてURLで指定したパスが値として入っている。

** bridge()を使ってアクセス制御 [#h4a87093]
 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;
    }
 }
- 制限のないURLは以下の通り。
-- http://localhost:3000/
-- http://localhost:3000/login
- それ以外のURL、http://localhost:3000/blog/editなどにアクセスすると、bridge()によりMyApp:Adminクラスのauthメソッドが実行される。
- auth()ではアクセス権を調べ、アクセス権がなければhttp://localhost:3000/loginにリダイレクトする。アクセス権があれば、ルーティング設定の通りにMyApp::Blogクラスのedit()メソッドが実行される。



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS