PHPメンターズの後藤です。この記事はSymfony Advent Calendar JP 2011の17日目の記事です。

Webアプリケーションでは、ユーザーがフォームに入力した情報をPOSTメソッドで受け取ってアクションで処理した後、完了画面などの処理結果を表示する画面のURLへリダイレクトによって遷移させることが常套手段となっています。Symfonyは、WebデバッグツールバーやWebプロファイラを使った簡単なデバッグができるのが特徴ですが、あくまでWebブラウザの画面に描画されるものであるため、リダイレクトされる直前の、実際に処理を行なっている時の状況をWebデバッグツールバーやWebプロファイラで見ることができないように思えます。

リダイレクト・インターセプション

そこでSymfony2では、「リダイレクト・インターセプション」という機能が導入されました。この機能を有効にすると、アクションからリダイレクト指示をレスポンスとして返した場合、ユーザーのWebブラウザへ返す前にSymfonyがそれを捕捉(インターセプト)し、「●●のURLへリダイレクトされます」というような文面の通常のHTMLレスポンスに自動的に書き換えてWebブラウザへ返すようになります。もちろんこの場合には、WebデバッグツールバーとWebプロファイラも見ることができます。

リダイレクト・インターセプションを有効化するには

リダイレクト・インターセプションは、Symfony2 Standard Editionのデフォルトの設定では無効になっていますが、単に設定ファイルで「intercept_redirects」をtrueに書き換えるだけで有効化できます。

app/config/config_dev.yml

# snip
web_profiler:
    toolbar: true
    intercept_redirects: true # trueに変更
# snip

このように変更し、アクションで次のようにリダイレクトレスポンスを返したとします。

public function helloAction($name)
{
    // 何らかの処理
    // :

    // トップページヘリダイレクト
    return $this->redirect($this->generateUrl('toppage'));
}

すると、直接遷移先のページへリダイレクトするのではなく、次のようなページが表示されるようになります。

中央に表示されているリンクをクリックすれば、本来の遷移先へ画面が切り替わりますが、その前にプロファイル情報などを確認できます。

まとめ

Symfony2のリダイレクト・インターセプションについて概要と設定方法を解説しました。Symfoy2 Standard Editionでは、デフォルトではリダイレクト・インターセプションが無効になっていますが、開発をスタートする段階で有効化しておくと便利です。

Symfony Advent Calendar JP 2011 18日目となる明日の担当は、OpenPNESocietoなどの開発をされている@co3kさんです。

参考