カスタマイズ編(3) フラッシュメッセージの表示¶
Note
この記事は、Symfony 2.0.7 で動作確認しています。
フラッシュメッセージを表示する¶
現在のblogアプリケーションでは、記事の追加・編集・削除をすると自動的に記事一覧にリダイレクトしますが、 何が起きて記事一覧が表示されたのかがよくわかりません。 一般的にはフラッシュメッセージと呼ばれる一時的なメッセージを表示してユーザに知らせることが多いでしょう (例えば、記事追加直後の画面には「記事を追加しました」といったメッセージが表示されます)。 Symfony2にはセッション管理の一環としてフラッシュメッセージを簡単に扱うための機能があります。
フラッシュメッセージを登録するには、コントローラで以下のように書きます。 おそらく、POSTリクエストで来たフォームの値を処理して、リダイレクトする前に記述するでしょう。
$this->get('session')->setFlash('notice', '変更が保存されました!');
フラッシュメッセージを表示するには、Twigで以下のように書きます。
{% if app.session.hasFlash('notice') %}
<div class="flash-notice">
{{ app.session.flash('notice') }}
</div>
{% endif %}
修正する¶
実際にblogアプリケーションを修正してみましょう。 まずは Default コントローラの newAction()、editAction()、deleteAction() のリダイレクト文の直前に、 フラッシュメッセージを登録する処理を追加します。
// src/My/BlogBundle/Controller/DefaultController.php
public function newAction()
{
// ...
$this->get('session')->setFlash('my_blog', '記事を追加しました');
return $this->redirect($this->generateUrl('blog_index'));
// ...
}
public function deleteAction($id)
{
// ...
$this->get('session')->setFlash('my_blog', '記事を削除しました');
return $this->redirect($this->generateUrl('blog_index'));
// ...
}
public function editAction($id)
{
// ...
$this->get('session')->setFlash('my_blog', '記事を編集しました');
return $this->redirect($this->generateUrl('blog_index'));
// ...
}
次にテンプレートを修正して、フラッシュメッセージを表示させます。 <h1>タグの直前に埋め込みます。
{# src/My/BlogBundle/Resources/views/Default/index.html.twig #}
{# ... #}
{% if app.session.hasFlash('my_blog') %}
<div style="background-color:yellow;color:red;font-weight:bold;">
{{ app.session.flash('my_blog') }}
</div>
{% endif %}
<h1>Blog posts</h1>
{# ... #}
ブラウザで確認する¶
ブラウザで確認してみましょう。追加・編集・削除の操作の直後に記事一覧が表示されたとき、 ページ上部に黄色い背景の赤い大きな文字でフラッシュメッセージが表示されているでしょう。 記事一覧をリロードするとフラッシュメッセージは消えてしまいます。