ページにフラッシュメッセージのサポートを追加したいと思います。見つかったドキュメントに従ってこれを実装しました ここ 。
基本レイアウトに次のスニペットを追加しました。 (私もそれを特定のアクションテンプレートに追加しようとしました)。
{% if app.session.hasFlash('notice') %}
<div id="flashmessage" class="flash-notice">
{{ app.session.flash('notice') }}
</div>
{% endif %}
追加後、次のエラーがスローされます
Twig_Error_Runtime:「」のアイテム「hasFlash」が66行目の「MyBundle :: layout.html.twig」に存在しません
他に何かする必要がありますか?
symfony2.0または2.1を使用していますか (現在はマスターブランチ)?
symfony 2.1の場合、ドキュメントはここにあります: http://symfony.com/doc/2.1/book/controller.html#flash-messages
フラッシュメッセージは次のように表示されます。
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="flash-notice">
{{ flashMessage }}
</div>
{% endfor %}
Mmmは、セッションを自動開始したことを構成ファイルで確認します。
session:
default_locale: %locale%
auto_start: true
エラーはTwigがセッションクラスを見つけられず、hasFlash関数に関するものではないようです。実際、レイアウトにはほぼ同じコードがあります。
Symfonyで2.6+
{% if app.session.flashbag.has('notice') %}
{{ app.session.flashbag.get('notice').0 }}<br/>
{% endif %}
Flashbagはこのバージョンの配列によるものであるため、foreachするか、インデックスを使用する必要があります。これ以上何か必要ないので、インデックスを使用しています。
これは執筆時点ではかなり古いので、これまでに解決したと想像してください。ただし、参考までに、has
ではなくhasFlash
です。そう..
{% if app.session.flashbag.has('notice') %}
<div id="flashmessage" class="flash-notice">
{{ app.session.flashbag.get('notice') }}
</div>
{% endif %}
コントローラー内
$this->get('session')->getFlashBag()->add('notice', 'Your message!');
あなたのTwigファイル
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="alert alert-warning">{{ flashMessage }}</div>
{% endfor %}
デバッグモードでintercept_redirects
がtrueの場合、フラッシュメッセージが機能しないことがわかりました。