有没有办法从Symfony外部访问FlashBag?

时间:2015-07-06 17:17:54

标签: symfony flash-message

我正在使用与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会话对象也会导致问题。

2 个答案:

答案 0 :(得分:0)

我发现所有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']);

答案 1 :(得分:0)

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