Railsだと,あるアクションはPOST以外は受付たくないってときには,
class NancharaController < ApplicationController verify :method => :post, :only => [ :create, :delete ], :redirect_to => { :action => :index } def create # createの処理 end # 略 end
という感じにverifyを使う.これだと,制限を一つの場所にかけてわかりやすい.一方,Catalystではぱっと見た感じverifyものが見つからなくて,
sub create : Local { my ($self, $c) = @_; if ($c->req->method ne 'POST') { $c->res->redirect($c->uri_for('/')); return; } # createの処理 }
という感じにアクション毎にPOSTを制限するコードを書いてる.なんかださいし,インデントが深くなっていかん.なんとか,Railsみたいにアクションの制限とかはコントローラで一括して書きたいところ.
Catalystだと,autoメソッドにしこんでおくのが普通なのかなぁ.だとすると,こんな感じ?
sub auto : Private { my ( $self, $c ) = @_; my @post_only_actions = qw(logout); if( $c->req->method ne 'POST' && grep { $c->action->name eq $_ } @post_only_actions ) { $c->res->redirect($c->uri_for('/user')); return 0; } return 1; }
うーん,なんかださい.みんなどうやってるんだろ.