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