web-dev-qa-db-ja.com

Symfony2のFlashメッセージが私の小枝テンプレートで機能しないようです

ページにフラッシュメッセージのサポートを追加したいと思います。見つかったドキュメントに従ってこれを実装しました ここ

基本レイアウトに次のスニペットを追加しました。 (私もそれを特定のアクションテンプレートに追加しようとしました)。

{% 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」に存在しません

他に何かする必要がありますか?

10
stijink

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 %}
18
c33s

Mmmは、セッションを自動開始したことを構成ファイルで確認します。

session:
    default_locale: %locale%
    auto_start:     true

エラーはTwigがセッションクラスを見つけられず、hasFlash関数に関するものではないようです。実際、レイアウトにはほぼ同じコードがあります。

6
Silence

Symfonyで2.6+

{% if app.session.flashbag.has('notice') %}
    {{ app.session.flashbag.get('notice').0 }}<br/>
{% endif %}

Flashbagはこのバージョンの配列によるものであるため、foreachするか、インデックスを使用する必要があります。これ以上何か必要ないので、インデックスを使用しています。

3
Franky238

これは執筆時点ではかなり古いので、これまでに解決したと想像してください。ただし、参考までに、hasではなくhasFlashです。そう..

{% if app.session.flashbag.has('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flashbag.get('notice') }} 
   </div> 
{% endif %} 
3
Jenko

コントローラー内

$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 %}  
1
Bialy7

デバッグモードでintercept_redirectsがtrueの場合、フラッシュメッセージが機能しないことがわかりました。

0
Ip512