Flash-сообщения в Symfony2, похоже, не работают в моем шаблоне twig

Я хочу добавить поддержку флеш-сообщений на наши страницы. Я реализовал это, следуя найденной документации здесь.

Я добавил следующий snipplet в мой базовый макет. (я также попытался добавить это конкретный шаблон действия).

{% if app.session.hasFlash('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flash('notice') }} 
   </div> 
{% endif %} 

После добавления следующей ошибки выдается

Twig_Error_Runtime: элемент "hasFlash" для "не существует в" MyBundle:: layout.html.twig" по строке 66

Есть ли что-нибудь еще, что мне нужно сделать?

Ответ 1

используете ли вы symfony 2.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 %}

Ответ 2

Mmm проверьте в своем конфигурационном файле, что вы автоматически начали сеанс:

session:
    default_locale: %locale%
    auto_start:     true

Поскольку ошибка, похоже, заключается в том, что Twig не находит класс сеанса, а не что-то о функции hasFlash. На самом деле у меня почти одинаковый код в моем макете.

Ответ 3

Это довольно старый момент написания, так что представьте, что вы уже разработали его, но для справки он has, а не hasFlash. Так..

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

Ответ 4

По symfony 2.6 +

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

Поскольку flashbag находится по этому массиву версий, вам нужно указать его или использовать индекс. Я использую индекс, потому что мне не нужно что-то еще.

Ответ 5

В контроллере

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

Ответ 6

Я просто выясню, что флэш-сообщения не работают, если intercept_redirects является истинным в режиме отладки.

Ответ 7

Вы установили флеш-сообщение где-нибудь в своем действии?

$this->get('session')->setFlash('notice', 'Your changes were saved!');

Помните, что флэш-сообщения будут сохранены в сеансе пользователя для получения строгого запроса один.