カテゴリ: Symfony 更新日: 2025/12/24

SymfonyのFlashメッセージ完全ガイド!初心者でもわかる通知の仕組みと使い方

SymfonyのFlashメッセージの使い方(ユーザーへの通知)
SymfonyのFlashメッセージの使い方(ユーザーへの通知)

先生と生徒の会話形式で理解しよう

生徒

「Symfonyでボタンを押したときに『保存しました』みたいな通知って出せるんですか?」

先生

「はい、Symfonyでは『Flashメッセージ』という仕組みを使って、ユーザーに一時的な通知を表示することができますよ。」

生徒

「Flashメッセージって何ですか?難しくないですか?」

先生

「大丈夫です。とてもシンプルな仕組みなので、初心者の方でもすぐに使えるようになりますよ。では一緒に見ていきましょう!」

1. Flashメッセージとは?

1. Flashメッセージとは?
1. Flashメッセージとは?

Flashメッセージ(フラッシュメッセージ)とは、Symfonyで一時的にユーザーへ通知を伝えるための仕組みです。最大の特徴は「一度だけ表示されて、自動的に消える」点にあります。たとえば、フォーム送信後に「登録が完了しました」「更新に失敗しました」といった結果を、次の画面で分かりやすく伝えたいときによく使われます。

通常、画面遷移(ページ移動)をすると、直前の処理結果は消えてしまいます。しかしFlashメッセージを使うことで、ページを移動したあとでも処理結果をユーザーに伝えられるようになります。「今の操作が成功したのか失敗したのか」を知らせる役割を持つ、と考えるとイメージしやすいでしょう。

仕組みとしては、メッセージを一時的にセッションへ保存し、次の画面で表示したあとに自動で削除されます。そのため、何度も同じ通知が表示されることはありません。

たとえば、コントローラで次のようにFlashメッセージを設定すると、次のページで一度だけ表示されます。


$this->addFlash('success', '登録が完了しました');

この1行だけで「通知をセットする」ことができるのがFlashメッセージの魅力です。難しい処理はなく、初心者でもユーザーに分かりやすいフィードバックを簡単に追加できる便利な機能だと覚えておきましょう。

2. Flashメッセージが使われる場面

2. Flashメッセージが使われる場面
2. Flashメッセージが使われる場面

Flashメッセージは、「ユーザーの操作結果をその場で分かりやすく伝えたいとき」に活躍します。特に、画面遷移を伴う処理では結果が見えにくくなるため、Flashメッセージがあることでユーザーは安心して操作を続けられます。

実際によく使われる場面としては、次のようなケースがあります。

  • ユーザー登録や会員情報の更新が正常に完了したことを伝えたいとき
  • フォーム入力に不備があり、処理が失敗したことを知らせたいとき
  • ログイン・ログアウト後に、状態が切り替わったことを表示したいとき
  • データ削除や変更など、重要な操作が完了したことを確認してもらいたいとき

たとえば「保存ボタンを押したけれど、ちゃんと保存できたのか不安…」という状況でも、画面上に「保存しました」と表示されれば、ユーザーは迷わず次の操作に進めます。このように、Flashメッセージは操作結果を補足する役割を持っています。

初心者のうちは、「処理が終わったあとに一言メッセージを出したい場面」でFlashメッセージを使う、と覚えておくと理解しやすいでしょう。

3. Flashメッセージをコントローラで設定する方法

3. Flashメッセージをコントローラで設定する方法
3. Flashメッセージをコントローラで設定する方法

Flashメッセージは、Symfonyのコントローラで「通知文を一時的に保存する」ことで使えるようになります。ポイントは、処理が終わったタイミングでメッセージをセットしておき、次の画面で表示させる流れにすることです。難しく考えず、「保存できたよ」「失敗したよ」と一言メモを残すイメージでOKです。

基本は、コントローラ内でaddFlash()を呼び出します。たとえば「保存に成功しました」と表示したい場合は、次のように書きます。


use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class SampleController extends AbstractController
{
    #[Route('/flash/set', name: 'flash_set')]
    public function setFlashMessage(): Response
    {
        // 1回だけ表示したいメッセージをセット
        $this->addFlash('success', 'データの保存に成功しました!');

        // 次の画面へ移動(移動先でメッセージが表示される)
        return $this->redirectToRoute('flash_show');
    }
}

addFlash()最初の引数はメッセージの種類(ラベル)です。ここで指定したsuccesserrorが、表示側でデザインを変える目印になります。2番目の引数が、実際に画面へ出したい文章です。

そして大事なのが、addFlash()のあとにredirectToRoute()などで画面遷移を入れることです。Flashメッセージは「次のリクエストで表示して消える」仕組みなので、同じ画面をそのまま表示するより、リダイレクトの形にすると分かりやすく確実です。

4. Twigテンプレートでメッセージを表示する方法

4. Twigテンプレートでメッセージを表示する方法
4. Twigテンプレートでメッセージを表示する方法

Flashメッセージをセットしただけでは、画面には何も出ません。最後に「表示する側」として、Twigテンプレートに出力の処理を書いておく必要があります。やることはシンプルで、Symfonyが用意しているapp.flashesをループして、メッセージを順番に画面へ表示するだけです。

まずは基本形です。コントローラでaddFlash('success', '...')のように登録したメッセージを、次のように取り出して表示します。


{% for label, messages in app.flashes %}
    {% for message in messages %}
        <div class="alert alert-{{ label }}">
            {{ message }}
        </div>
    {% endfor %}
{% endfor %}

ここでのポイントは2つあります。1つ目は、labelsuccess / error / warningのような「種類」が入ること。2つ目は、同じ種類のメッセージが複数入る場合があるので、messagesをもう一段ループしていることです。

また、表示の見た目を整えるなら、Bootstrapのアラートと相性が良いです。たとえばsuccessなら緑、dangerなら赤というように、メッセージの種類ごとに直感的に区別できます。上の例はalert alert-{{ label }}としているので、ラベル名をそのままクラスに流し込めて手軽です。

初めてのうちは、まずこのTwigを「表示したいページ」に貼り付けて、通知が出ることを確認しましょう。通知が一度表示されたら消えるのがFlashメッセージの仕様なので、リロードして消えるのも正常な動きです。

5. 実際の表示イメージ

5. 実際の表示イメージ
5. 実際の表示イメージ

たとえば、データを保存したあとの画面で次のように表示されます。


データの保存に成功しました!

これは、ユーザーに対して操作が成功したことを知らせるとても重要なフィードバックです。

6. Flashメッセージの種類とデザインの工夫

6. Flashメッセージの種類とデザインの工夫
6. Flashメッセージの種類とデザインの工夫

Flashメッセージの種類(label)には、よく以下のようなものが使われます:

  • success(成功)→ 緑色で表示
  • error または danger(エラー)→ 赤色で表示
  • warning(注意)→ 黄色で表示
  • info(情報)→ 青色で表示

Bootstrapと一緒に使うことで、視覚的にもわかりやすくなります。

7. Flashメッセージの注意点

7. Flashメッセージの注意点
7. Flashメッセージの注意点

Flashメッセージは一度だけ表示されるのが特徴です。画面をリロードしたり、別のページに移動すると消えてしまいます。

また、メッセージが設定されるのは「リダイレクト後」の画面である必要があります。そのため、addFlash()を設定したあとにはredirectToRoute()などで画面遷移を行うのが一般的です。

8. Flashメッセージが表示されないときのチェックポイント

8. Flashメッセージが表示されないときのチェックポイント
8. Flashメッセージが表示されないときのチェックポイント

もしFlashメッセージが表示されないときは、次の点をチェックしてみましょう:

  • リダイレクト先のテンプレートにapp.flashesのループがあるか?
  • セッションが有効になっているか?
  • addFlash()を記述したあとにきちんとリダイレクトしているか?

エラーが出ている場合は、Symfonyのログファイル(var/log/dev.log)も確認してみましょう。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド
No.8
Java&Spring記事人気No8
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)