MojoliciousでGETかPOSTかを取得する

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