【问题标题】:Show flash message without redirect (eg forward). Messages shown twice显示不带重定向的 Flash 消息(例如转发)。消息显示两次
【发布时间】:2012-02-03 23:00:12
【问题描述】:

是否可以在 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而不刷新页面?还是您的意思是显示一个 Flash 并刷新(相同,因为它不重定向)页面?
  • @swiecki,通常情况下,会设置 Flash 消息,然后重定向用户。但是如果我没有重定向用户,比如我只是使用了转发或者只是想在当前请求中显示一条消息?
  • @Hemant,你的意思是使用 Javascript 吗?这有什么帮助?
  • 通过使用ajax,您可以获取flash消息,然后将其显示在元素中
  • 请注意,会话/闪存行为正在发生一些变化:github.com/symfony/symfony/pull/2853

标签: php session symfony


【解决方案1】:

如果您不希望它们一直持续到下一个请求,为什么要使用闪存?

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

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

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

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

【讨论】:

    【解决方案2】:

    我会笼统地说,因为你想要的东西不是现成的标准。

    这个时候Symfony flash message出现在request之后,就是这样的,要保留它,你需要找一个替代方案,使用ajax调用。

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

    我在一些项目中使用了http://jquery.bassistance.de/message/demo/ 和这个示例 jquery 调用,效果很好:

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

    使用 ajax 保存项目的返回是不同的,在这种情况下,我使用 JSON 对数据进行编码,因此,如果您想执行其他操作,您可以在 JSON 数组中注入更多变量,在函数内操作它们(数据){ ... }

    希望有帮助

    【讨论】:

      【解决方案3】:

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

      如果您想在应用程序中管理某些用户通知,请在您的布局中创建一个控制器来管理通知 TWIG 块。此块可以嵌入闪存消息和您使用控制器处理的这些通知。您必须在会话中设置它们,在 NotificationController 中删除它们,这没关系...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多