Silex:使用 Flash 数据重定向

Posted

技术标签:

【中文标题】Silex:使用 Flash 数据重定向【英文标题】:Silex: Redirect with Flash Data 【发布时间】:2013-10-06 12:09:58 【问题描述】:

我需要使用 Silex 中的消息将一个页面重定向到另一个页面。希望有一种 Laravelesque 的做法,但我非常怀疑:

$app->redirect('/here', 301)->with('message', 'text');

然后我想在我的模板中显示消息:

 message 

如果没有,还有其他方法吗?

更新

我看到 Symfony 中有一个 getFlashBag 方法 - 这是我应该使用的吗?具体来说,我使用的是 Bolt 内容管理系统。

【问题讨论】:

【参考方案1】:

我创建了这个可能有用的简单FlashBagTrait

<?php
use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface;

trait FlashBagTrait

    /**
     * @return FlashBagInterface
     */
    public function getFlashBag() 
        return $this['session']->getFlashBag();
    

只需将它添加到您的 Application 课程中,它就会让事情变得更加简单!

$app->getFlashBag()->add('message',array('type'=>"danger",'content'=>"You shouldn't be here"));

% if app.flashbag.peek('message') %
<div class="row">
    % for flash in app.flashbag.get('message') %
        <div class="bs-callout bs-callout- flash.type ">
            <p> flash.content </p>
        </div>
    % endfor %
</div>
% endif %

它的主要优点是类型提示可以在 PhpStorm 中工作。

您也可以将其添加为服务提供者,

$app['flashbag'] = $app->share(function (Application $app) 
    return $app['session']->getFlashBag();
);

这使得在 PHP 中使用起来更方便(但你失去了类型提示):

$app['flashbag']->add('message',array('type'=>"danger",'content'=>"You shouldn't be here"));

【讨论】:

【参考方案2】:

是的,FlashBag 是正确的方法。 在你的控制器中设置一个 flash 消息(你可以添加多个消息):

$app['session']->getFlashBag()->add('message', 'text');
$app->redirect('/here', 301)

并在模板中打印出来:

% for message in app.session.getFlashBag.get('message') %
     message 
% endfor %

【讨论】:

要扩展@a4c8b 答案,请注意这将为每个请求创建一个会话cookie。修复请加peekAll,见Nyholm's gist

以上是关于Silex:使用 Flash 数据重定向的主要内容,如果未能解决你的问题,请参考以下文章

Spring 梳理-跨重定向请求传递数据-Flash

Symfony 安全返回 401 响应而不是重定向

重定向后 Flash 范围内的对象不可用

重定向后烧瓶闪存不起作用

重定向和转发

重定向后 CodeIgniter flashdata 不起作用