Home | Symfony2Doc

ご注意

Symfony2日本語翻訳ドキュメントは内容が古くなっております。公式サイトの英語ドキュメントを参照してください。

カスタマイズ編(3) フラッシュメッセージの表示

Note

この記事は、Symfony 2.5.6 で動作確認しています。

フラッシュメッセージを表示する

現在のblogアプリケーションでは、記事の追加・編集・削除をすると自動的に記事一覧にリダイレクトしますが、 何が起きて記事一覧が表示されたのかがよくわかりません。 一般的にはフラッシュメッセージと呼ばれる一時的なメッセージを表示してユーザに知らせることが多いでしょう (例えば、記事追加直後の画面には「記事を追加しました」といったメッセージが表示されます)。 Symfony2にはセッション管理の一環としてフラッシュメッセージを簡単に扱うための機能があります。

フラッシュメッセージを登録するには、コントローラで以下のように書きます。 おそらく、POSTリクエストで来たフォームの値を処理して、リダイレクトする前に記述するでしょう。

$this->get('session')->getFlashBag()->set('notice', '変更が保存されました!');
$this->get('session')->setFlash('notice', '変更が保存されました!');

フラッシュメッセージを表示するには、Twigで以下のように書きます。

{% for flashMessage in app.session.flashbag.get('notice') %}
        <div class="flash-notice">
                {{ flashMessage }}
        </div>
 {% endfor %}

修正する

実際にblogアプリケーションを修正してみましょう。 まずは Default コントローラの newAction()editAction()deleteAction() のリダイレクト文の直前に、 フラッシュメッセージを登録する処理を追加します。

// src/My/BlogBundle/Controller/DefaultController.php

    public function newAction()
    {
        // ...
        $this->get('session')->getFlashBag()->set('my_blog', '記事を追加しました');
        return $this->redirect($this->generateUrl('blog_index'));
        // ...
    }

    public function deleteAction($id)
    {
        // ...
        $this->get('session')->getFlashBag()->set('my_blog', '記事を削除しました');
        return $this->redirect($this->generateUrl('blog_index'));
        // ...
    }

    public function editAction($id)
    {
        // ...
        $this->get('session')->getFlashBag()->set('my_blog', '記事を編集しました');
        return $this->redirect($this->generateUrl('blog_index'));
        // ...
    }

次にテンプレートを修正して、フラッシュメッセージを表示させます。 <h1>タグの直前に埋め込みます。

{# src/My/BlogBundle/Resources/views/Default/index.html.twig #}
{# ... #}
    {% for flashMessage in app.session.flashbag.get('my_blog') %}
            <div class="flash-notice">
                    {{ flashMessage }}
            </div>
    {% endfor %}

<h1>Blog posts</h1>
{# ... #}

ブラウザで確認する

ブラウザで確認してみましょう。追加・編集・削除の操作の直後に記事一覧が表示されたとき、 ページ上部に黄色い背景の赤い大きな文字でフラッシュメッセージが表示されているでしょう。 記事一覧をリロードするとフラッシュメッセージは消えてしまいます。

blog comments powered by Disqus