結論から言うと、フレームワークの仕様をよく読んでいなかった。
フラッシュメッセージをセットする際、何パターンか書き方があるらしいが、基本的にSymfonyのドキュメントに書いてある通り以下のようにセットし、
| 
 1 2 3 4  | 
$this->addFlash(     'notice',     'Your changes were saved!' );  | 
取り出して表示する際はこのようにします。
| 
 1 2 3 4 5  | 
{% for flash_message in app.session.flashBag.get('notice') %}     <div class="flash-notice">         {{ flash_message }}     </div> {% endfor %}  | 
目次
フラッシュメッセージが消えない
フラッシュメッセージをただの分岐用のフラグとして使いたかった私は、twig側でこのような使い方をしてしまい、リロードしてもフラッシュメッセージが消えないと1人であたふた…。
| 
 1 2 3 4 5  | 
{% if app.session.flashbag.has('notice') %}     ... {% else %}     ... {% endif %}  | 
知ってる人はわかると思いますが、当然消えるわけないですよね…。
だって、getしてないんだもん!
ココを勘違い。
フラッシュメッセージはコントローラを呼び出した後、フレームワークのafter関数的な何かの機能で消えるものだと勝手に思い込んでいました。
getしたらあっさり解決
実際は自動的に消してくれるのではなく、app.session.flashBag.get等でgetしないと消えないのです。
つまり、分岐した後に取り出す必要があったわけです。
| 
 1 2 3 4 5 6  | 
{% if app.session.flashbag.has('notice') %}     ... {% else %}     ... {% endif %} {{ app.session.flashbag.get('notice')[0] }} {# empty #}  | 
または、先に取ってtwig側に引数として渡す方法もありますね。
アホ過ぎて笑えない…。


コメント