I want to add support for flash messages on our pages. I implemented this by following the documentation found here.
I added the following snipplet to my base layout. (i also tried to add it to a specific action template).
{% if app.session.hasFlash('notice') %}
<div id="flashmessage" class="flash-notice">
{{ app.session.flash('notice') }}
</div>
{% endif %}
After adding the following error is thrown
Twig_Error_Runtime: Item "hasFlash" for "" does not exist in "MyBundle::layout.html.twig" at line 66
Is there anything else i need to do ?
do you use symfony 2.0 or 2.1 (currently master branch)?
for symfony 2.1 the documentation is located here: http://symfony.com/doc/2.1/book/controller.html#flash-messages
flash messages are shown like this:
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="flash-notice">
{{ flashMessage }}
</div>
{% endfor %}
Mmm check in your config file that you have auto-started the session:
session:
default_locale: %locale%
auto_start: true
Because the error seems to be that Twig doesn't find the session class, not something about the hasFlash function. In fact I have almost exactly the same code in my layout.
This is pretty old at time of writing so imagine you've worked it out by now, but for reference sake, it's has
rather than hasFlash
. So..
{% if app.session.flashbag.has('notice') %}
<div id="flashmessage" class="flash-notice">
{{ app.session.flashbag.get('notice') }}
</div>
{% endif %}
By symfony 2.6 +
{% if app.session.flashbag.has('notice') %}
{{ app.session.flashbag.get('notice').0 }}<br/>
{% endif %}
Because flashbag is by this version array you need foreach it or use index. I m using index because i dont need something more.
In controller
$this->get('session')->getFlashBag()->add('notice', 'Your message!');
In your Twig file
{% for flashMessage in app.session.flashbag.get('notice') %}
<div class="alert alert-warning">{{ flashMessage }}</div>
{% endfor %}
I just figure out that flash messages are not working if intercept_redirects
is true in debug mode.
Did you set the flash message somewhere in your action?
$this->get('session')->setFlash('notice', 'Your changes were saved!');
Remember that flash messages will be stored on the user's session for exactly one additional request.
来源:https://stackoverflow.com/questions/8240110/flash-messages-in-symfony2-doesnt-seem-to-work-in-my-twig-template