HTTPメソッドを判別する
基本的にはディスパッチャでPOSTかGETかを判別して振り分けするのですが、GET/POST両対応のページで処理を分けたい場合があります。
例えば、メールフォーム等の機能で、一番最初の入力画面はGETですが、確認画面から戻る際の入力画面はPOSTで、さらに最初に入力画面を表示する場合は初期値をセットしたい、などといった場合です。
そんな時は、ディスパッチャ側ではany
でGET/POST両方受けるようにして、飛び先で$self->req->method
をチェックして振り分ければOK!
my $r = $self->routes; $r->any('/form/')->to('form#input'); # 入力画面 $r->post('/form/check/')->to('form#check'); # 確認画面 ...
sub input { if($self->req->method eq 'GET') { # -- GET時の処理(初期値のセットなど) ... } elsif($self->req->method eq 'POST') { # -- POST時の処理(確認画面からの入力データの再セットなど) ... } else { # -- それ以外のメソッドの場合は404を返す return $self->render_not_found; } }
確認したバージョン
- Mojolicious 4.67