FORSMILE
EN
Symfony2022/03/07

フラッシュメッセージの実装方法[Symfony]

PHPのフレームワーク、Symfonyでのフラッシュメッセージの実装方法、使い方などの解説をしたいと思います。

ブログ一覧へ / Back to Blog

PHPのフレームワーク、Symfonyでのフラッシュメッセージの実装方法、使い方などの解説をしたいと思います。

フラッシュメッセージ(flash message)とはエラーなどがあった場合に、ちょっと画面に表示したいときに便利な機能です。

基本的には一度きり表示してリロードした場合は削除するケースが多いと思います。

Controllerの記述

php
$this->addFlash('notice', 'test notice');

// or
$this->get('session')->getFlashBag()->add('notice', 'test notice');

簡単ですね。これでセッションにフラッシュメッセージが格納されました。

フラッシュメッセージを表示する設定がされている画面を開くことでメッセージが表示されます。

Twigテンプレートの記述

SymfonyのデフォルトテンプレートであるTwigの場合です。

css
{% for message in app.flashes('notice') %}
<div>
    {{ message }}
</div>
{% endfor %}

// or
{% for message in app.session.flashBag.get('notice') %}
<div>
    {{ message }}
</div>
{% endfor %}

テンプレート側は、フラッシュメッセージが配列で格納されているので「for」などで記述します。

下の書き方は、flashBag以外にもSessionApiを参照できるので覚えておくと便利です。

フラッシュメッセージ関連その他トピックス

■フラッシュメッセージを表示したときにセッションから削除したくない場合

peekを使うことで、表示してもセッションから削除されません。

css
{% for message in app.session.flashBag.peek('notice') %}
<div>
    {{ message }}
</div>
{% endfor %}

応用で、コントローラ側でフラッシュメッセージを取得して、セッションから削除したくない場合も使えます。

php
// not clear from session
$message = $this->container->get('session')->getFlashBag()->peek('notice');

// clear from session
$message = $this->container->get('session')->getFlashBag()->get('notice');

■フラッシュメッセージがセッションに存在するか確認する

hasを使うとフラッシュメッセージがある場合、trueを返却します。

php
// Controller
$isMessage = $this->container->get('session')->getFlashBag()->has('notice');

// Template
{% if app.session.flashbag.has('notice') %}
<div>
    {{ message }}
</div>
{% endif %}

■$_SESSIONから取得する方法

dumpしていただければすぐわかりますが、$_SESSION['_symfony_flashes']でもフラッシュメッセージ内のデータが取得可能です。

Symfonyおすすめ書籍

あまり種類がないのと、そもそもフレームワークとして情報が膨大なので、入門でも結構読み応えがあります。

📦
Amazon で関連書籍・ツールを検索
Symfony PHP フレームワーク
Amazonで探す →(アソシエイトリンク)