Translate

2012年9月14日金曜日

その2 ルートについて

■ルートの指定
まずは、ヘルパースクリプトを使ってルートの確認
#!/usr/bin/env perl                                                                                       
use Mojolicious::Lite;

# Documentation browser under "/perldoc"                                                                  
plugin 'PODRenderer';

get '/' => sub {
  my $self = shift;
  $self->render('index');
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
% title 'Welcome';
Welcome to the Mojolicious real-time web framework!

@@ layouts/default.html.ep


  <%= title %>
  <%= content %>

該当部分は、以下のコードですね
get '/' => sub{};


1.静的パス
get '/foo/bar/baz1' => sub {shift->render(text=>'/foo/bar/baz1'};
get '/foo/bar/baz2' => sub {shift->render(text=>'/foo/bar/baz2'};
get '/foo/bar/baz3' => sub {shift->render(text=>'/foo/bar/baz3'};

http://localhost:3000/foo/bar/baz1
http://localhost:3000/foo/bar/baz2
http://localhost:3000/foo/bar/baz3
それぞれにアクセスしたら
/foo/bar/baz1
/foo/bar/baz2
/foo/bar/baz3
と表示されます


2.動的パス
実際のところ、静的なパスより動的なパスの方が多いと思うので
一番最後のパスは動的に変わるとしたら…
get '/foo/bar/:baz' => sub{
  my $self = shift;
  my $baz  = $self->param('baz');
  $self->render(text => '/foo/bar/' . $baz);
};

:名前 は、ドットとスラッシュ以外の全てにマッチします。
そして、shift->param('名前')で値を取り出せます。


ただ、静的パスの例のようにbaz+数字にヒットさせたい場合
上記の方法では、それ以外のパターンもヒットするので困ります。
こういった場合、正規表現を指定することで解決できます。
get '/foo/bar/:baz' => [baz => qr/baz\d+/] => sub{                                                        
  my $self = shift;
  my $baz  = $self->param('baz'); #stashにも登録されている $self->stash('baz')
  $self->render(text => '/foo/bar/' . $baz);
};


ルートの指定についてはいろいろあり紹介しきれないので
こちらを参照するとよいと思います。
Mojolicious::Lite


■パラメータの取得
get/postどちらもparamメソッドを使えば取得できます。
[getの場合]
shift->param("Query名");
[postの場合]
shift->param("Name属性名");

getの参考例
get '/get' => sub{
  my $self = shift;
  my $date = $self->param("date");
  $self->render_text("Date:" . $date);
};
http://localhost:3000/get?date=20121203
にアクセスすると
Date:20121203
と表示されます。

チェックボックスの値など複数の値が帰ってくる場合は
配列変数で受け取ればよいです。
また、引数を省略すると全てのパラメータ名が帰ってきます。


Mojolicious::Liteへ戻る

0 件のコメント:

コメントを投稿