LoginSignup
4
4

More than 5 years have passed since last update.

Mojoliciousの基本的なルーティングがよくわからなくて

Last updated at Posted at 2013-11-13

2013.12.18 書き直しました。

Perlでフレームワークを使用するときはMojoliciousを使用することにしています。
とはいってもあまりちゃんと使ったことがないので、悩む点がちょこちょこありました。
Mojoliciousドキュメント 日本語訳をただ読んでみても理解が進まないので、とりあえず書いてみて確かめながら勉強中です。

何がわからなかったのか?

URLが多階層になった場合の記述がよくわかりませんでした。
たとえば、
http://localhost/test/
とかの場合だと、

Test.pm
$r->get('/test')->to('test#test');

で問題なく動きますし、

Test.pm
$r->get('/test/lowpage')->to('lowpage#test');

でも動くのですが、lib内のアプリ本体直下のファイル数がやたら増えるので嫌だし、何でもかんでもプレースホルダー使って取得してしまうのも間違っていると思うし、ぐちゃぐちゃして嫌なのでした。
もっと具体的に言えば、
$r->get('/hoge') を Test::Hoge->hoge()
$r->get('/hoge/piyo') を Test::Hoge->piyo()
にしたい、って感じです。
調べても全然出てこなくて。というか、文書を読んでも理解できなかっただけなんですけれど。

結論

試行錯誤の過程を書いても仕方がないので、結果を。

$r->get('/foo')->to('foo#foo');
$r->get('/foo/bar')->to('foo-bar#bar');
$r->get('/baz/qux')->to('baz-qux_quux#foo_bar');

と記述した場合、呼び出されるファイルは以下でした。

$r->get('/foo')->to('foo#foo');
コントローラ:lib/MyAPP/Foo.pm の sub foo
テンプレート:template/foo/foo.html.ep

$r->get('/foo/bar')->to('foo-bar#bar');
コントローラ:lib/MyAPP/Foo/Bar.pm の sub bar
テンプレート:template/foo/bar/bar.html.ep

$r->get('/baz/qux')->to('baz-qux_quux#foo_bar');
コントローラ:lib/MyAPP/Baz/QuxQuux.pm の sub foo_bar
テンプレート:template/baz/qux_quux/foo_bar.html.ep

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