2013-01-22 80 views
11

我想在我的控制器中設置Flash,然後在TWIG中檢查Flash是否已設置。我的問題是,TWIG總是報告我的Flash尚未設置,我不確定原因。Symfony - 在Flash中設置Flash和檢查

控制器:

$session->getFlashBag()->add('error', 'Does Not Exist'); 

TWIG:

{{ dump(app.session.hasFlash('error')) }} //outputs false 
{{ dump(app.session.getFlashBag().get('error')) }} //outputs false 

回答

47

在控制器

$this->get('session')->getFlashBag()->set('error', 'Does Not Exist'); 

or 

$this->get('session')->getFlashBag()->add('error', 'Does Not Exist'); 

在枝條

{% for flashMessage in app.session.flashbag.get('error') %} 

    {{ flashMessage }} 

{% endfor %} 

供參考:Doc

+0

我已經試過了,但是當我'{{轉儲(flashMessage)}}'在桂枝,我甚至不看任何東西出現在屏幕上。 – Jon

+1

以前在控制器上工作的人通過'$ session = new Session();'創建了一個新會話。我應該通過'$ session'而不是'$ this-> get('session')'來引用會話嗎? – Jon

+0

恩,它工作得很漂亮。 – Jon

10
In Controller : 
    $this->get('session')->getFlashBag()->add('error', "User does not exists."); 
In View : 
{% for type, messages in app.session.flashbag.all() %} 
    {% for message in messages %} 
    {% if type == 'error' %} 
      {{ message }} 
    {% endif %} 
    {# Or even with css class rendering: 
    <div class="flash-{{type}}">{{message}}</div> 
    #} 
    {% endfor %} 
{% endfor %} 
4

值得注意的是,那在Symfony 3.3及以上版本中我們可以使用簡化版本app.flashes()。例如:

{% for message in app.flashes('notice') %} 
    <div class="flash-notice"> 
     {{ message }} 
    </div> 
{% endfor %} 

Source