MojoでControllerのディレクトリを掘る設定
Mojoliciousはデフォルトでは
lib/AppName/
配下に置かれたファイルがコントローラになります。
でも数が増えてきたらディレクトリ作って管理したいですよね!
そんなときはnamespaceを使うと実現できます。
では、以下のような構成にしたい場合の設定を見てみましょう。
lib/ |-- Demo | `-- MyController →コントローラをここに集めたい | `-- Vuvuzela.pm | `-- ... | `-- ... `-- Demo.pm
Demoアプリを作る
mojolicious generate app Demo
lib/Demo.pm
package Demo; use strict; use warnings; use base 'Mojolicious'; # This method will run once at server start sub startup { my $self = shift; # Routes my $r = $self->routes; # ルート設定 # Podにはいろいろな記述方法が載っているが、 # controllerは明示的に指定した方が良いかも # (うまくレンダリングしてくれないことがあった) $r->route('/buooo')->to(controller => 'vuvuzela', action => 'boo', namespace => 'Demo::MyController' ); } 1;
lib/Demo/MyController/Vuvuzela.pm
package Demo::MyController::Vuvuzela; use strict; use warnings; use base 'Mojolicious::Controller'; sub boo{ my $self = shift; $self->render(message => '(#‵)3′)▂▂▂▃▄▅ ブオオオオオオ”'); } 1;
template/vuvuzela/boo.html.ep*1
% layout 'default'; <h2><%= $message %></h2>
こんな感じでコントローラクラスが管理できます。
いい感じ!
(※参考)
http://github.com/kraih/mojo/blob/master/lib/Mojolicious/Guides/Routing.pod
*1:後ろのパス2つを「コントローラ」「アクション」と合わせればOK