显示不带重定向的即时消息(例如转发)。消息显示两次

发布于 2024-12-25 11:21:12 字数 636 浏览 0 评论 0原文

是否可以在 Symfony 2 中显示 Flash 消息而无需重定向?或者在 Google 网上论坛的另一个可能的解决方案中编辑核心文件?

//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; 
    } 
} 

更新

哦,实际上我注意到,如果我只是使用转发,则会显示闪现消息,但在下一个请求时它仍然会显示

Is it possible to show flash messages in Symfony 2 without redirect? Or editing core files in another possible solution on google groups?

//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; 
    } 
} 

UPDATE

Oh actually I noticed if I just used a forward, flash messages will show, but it will still show on next request

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

苍风燃霜 2025-01-01 11:21:12

如果您不希望它们保留到下一个请求之前,为什么要使用闪烁呢?

您找不到其他方式来显示反馈(例如模板参数)吗?

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

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

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

Why using flashes if you don't want them to be persisted until next request ?

Couldn't you find other ways to display feedback like template parameters ?

If not, you could add this in your templates (according you are displaying flashes like below):

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

So that any template that displays these flashes before redirection will remove them from session before returning the response. I think it's the last better solution.

病女 2025-01-01 11:21:12

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

这时Symfony flash messages出现在请求之后,它们是这样的,要保存它,你需要找到替代方案,使用ajax调用。

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

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

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

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

希望有帮助

I will speak in general terms, because you want something that is not a ready standard.

At this time Symfony flash messages appear after the request, they are this way, and to preserve it, you need to find an alternative, usign an ajax call.

You need to call an action script using an ajax request, serializing the data of a form, getting the message to return and then display it the way it server you better.

I used http://jquery.bassistance.de/message/demo/ along with this sample jquery call in some projects, works good:

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

The return from saving an item with ajax is different, in this case i´m encoding the data using JSON, so, if you want to perfom another actions you can inject more variables in the JSON array, manipulating them inside function(data) { ... }

Hope that helps

只等公子 2025-01-01 11:21:12

创建 Flash 消息是为了完成表单提交成功后通常执行的重定向。这就是为什么他们为 2 个请求而活。

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

Flash messages have been created in order to live through the redirection you usually do after a form submission success. That's why they live for 2 requests.

If you want to manage soem user notifications in your app, make a controller managing a notification TWIG block in your layout. This block can embed flash messages AND these notifications you handle with the controller. You'll have to set them in your session, remove them in your NotificationController and it's alright...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文