显示没有重定向的Flash消息(例如,向前)。消息显示两次

时间:2012-01-06 06:04:55

标签: php session symfony

是否可以在没有重定向的情况下在Symfony 2中显示Flash消息?或者在google群组中编辑其他possible solution核心文件?

//Symfony\Component\HttpFoundation\Session 
public function setFlash($name, $value, $persist = true) 
{ 
    if (false === $this->started) { 
        $this->start(); 
    } 
    $this->flashes[$name] = $value; 
    if($persist) { 
        unset($this->oldFlashes[$name]); 
    } 
    else { 
        $this->oldFlashes[$name] = $value; 
    } 
} 

更新

实际上我注意到我是否只是使用了前进的flash消息会显示,但它仍然会在下一个请求中显示

3 个答案:

答案 0 :(得分:7)

如果您不希望在下次请求之前保留闪烁,为什么要使用闪存?

你难道不能找到其他方法来显示模板参数之类的反馈吗?

如果没有,您可以在模板中添加它(根据您显示的闪光如下):

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

因此,在重定向之前显示这些闪烁的任何模板都会在返回响应之前将它们从会话中删除。我认为这是最后一个更好的解决方案。

答案 1 :(得分:3)

我会用一般性的话说,因为你想要一些不是现成标准的东西。

此时Symfony flash消息出现在请求之后,就是这样,为了保留它,你需要找到一个替代方案,使用ajax调用。

您需要使用ajax请求调用操作脚本,序列化表单数据,获取要返回的消息,然后以更好地为您提供服务的方式显示它。

我在一些项目中使用http://jquery.bassistance.de/message/demo/以及此示例jquery调用,效果很好:

 $.post("/product/saveAjax", { $("#product").serialize() },
 function(data){
  $().message(data.message);
 }, "json");

使用ajax保存项目的返回是不同的,在这种情况下我使用JSON编码数据,所以,如果你想要执行另一个动作,你可以在JSON数组中注入更多变量,在函数内部操作它们(数据){...}

希望有所帮助

答案 2 :(得分:1)

已创建Flash消息,以便在表单提交成功后通常执行重定向。这就是他们为2个请求而生活的原因。

如果您想在应用中管理soem用户通知,请让控制器管理布局中的通知TWIG块。此块可以嵌入闪存消息和您使用控制器处理的这些通知。你必须在你的会话中设置它们,在你的NotificationController中删除它们就好了......