Flash-сообщения в Symfony2, кажется, не работают в моем шаблоне ветки - PullRequest
10 голосов
/ 23 ноября 2011

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

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

{% 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

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

Ответы [ 7 ]

18 голосов
/ 31 июля 2012

используете ли вы 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 %}
6 голосов
/ 23 ноября 2011

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

session:
    default_locale: %locale%
    auto_start:     true

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

3 голосов
/ 05 сентября 2015

По symfony 2.6 +

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

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

3 голосов
/ 21 марта 2015

Это довольно старое время на момент написания, так что представьте, что вы уже решили это, но для справки, это has, а не hasFlash.Итак ..

{% if app.session.flashbag.has('notice') %} 
    <div id="flashmessage" class="flash-notice"> 
       {{ app.session.flashbag.get('notice') }} 
   </div> 
{% endif %} 
1 голос
/ 28 ноября 2014

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

$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 %}  
0 голосов
/ 17 мая 2012

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

0 голосов
/ 23 ноября 2011

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

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

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

...