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