【问题标题】:Is there a way to access the FlashBag from outside Symfony?有没有办法从 Symfony 外部访问 FlashBag?
【发布时间】:2015-07-06 17:17:53
【问题描述】:

我正在使用与 Symfony 应用程序交互的应用程序,并从使用 FlashBag 的 Symfony 应用程序呈现模板。到目前为止我所拥有的:

use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;

/*snipped code that creates a Symfony container*/

$container->enterScope('request');
$container->set('request', new \Symfony\Component\HttpFoundation\Request(), 'request');
$twig = $container->get('twig');
$twig->addGlobal('app', array('session' => array('flashbag' => new FlashBag())));
echo $twig->render('AdminBundle::flashMessages.html.twig');

问题是我创建的 FlashBag 对象没有获取会话中的 Flash 消息,因此虽然从技术上讲,twig 模板确实呈现,但它实际上从未显示 Flash 消息。

另外一个难点是外部应用使用了会话,所以仅仅创建一个 Symfony 会话对象也会导致问题。

【问题讨论】:

    标签: symfony flash-message


    【解决方案1】:

    我发现 Symfony 的所有 flash 消息都存储在 $_SESSION['_sf2_flashes'] 中。创建 FlashBag 后,我调用初始化并在 $_SESSION 中传递 Flash 消息,就像这样,然后将 flashBag 作为全局添加到 Twig:

    $flashMessages = isset($_SESSION['_sf2_flashes']) ? $_SESSION['_sf2_flashes'] : array();
    $flash->initialize($flashMessages);
    

    我还发现,以这种方式完成后,flash 消息似乎不会像您以正常方式访问它们时那样从$_SESSION 被消耗掉,所以我也不得不打电话:

    unset($_SESSION['_sf2_flashes']);
    

    【讨论】:

      【解决方案2】:

      您需要使用 Request::createFromGlobals() 来填充您的 Request 对象。然后您可以使用该请求对象来获取 Flash 消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-19
        • 2021-09-10
        相关资源
        最近更新 更多