Symfony 2.1 app.session.flashbag.get('something')返回空值

时间:2012-10-04 09:58:24

标签: php session symfony

使用app.session.flashbag.get('notice')时遇到问题。

在控制器中我做

public function updateAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('SomeBundle:SomeEntity')->find($id);

    $editForm = $this->createForm(new SomeEntityType(), $entity);
    $editForm->bind($request);

    if ($editForm->isValid()) {
        $em->persist($entity);
        $em->flush();

        $flash = $this->get('translator')->trans('Some Entity was successfully updated');
        $this->get('session')->getFlashBag()->add('notice', $flash);

        return $this->redirect($this->generateUrl('some_entity_edit', array('id' => $id)));

    }

在editAction中,我从会话中获取信息:

public function editAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $flashes = $this->get('session')->getFlashBag()->get('notice', array());

    //...
    //...

    return array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
        'flashes' => $flashes
    );
}

我正在尝试TWIG从会话中获取信息:

TWIG: {% for flashMessage in app.session.flashbag.get('notice') %}{{ flashMessage }}{% endfor %}

PHP: {% for flashMessage2 in flashes %}{{ flashMessage2 }}{% endfor %}

app.session.flashbag.get('notice')为空,闪烁有一个值。

你有什么想法,为什么我无法从app.session.flashbag.get('notice')获取数据?

2 个答案:

答案 0 :(得分:5)

它的正常行为。您首先访问控制器中的闪存,然后返回并取消设置。当你再次访问它时,flashbag中的密钥不存在,那是空的。

请参阅github上的FlashBag::get

答案 1 :(得分:0)

有一种简单的方法可以使用FlashAlertBundle处理(添加/显示) Symfony flash消息,它是使用纯JavaScript实现的独立Symfony2软件包,因此您不必担心关于使用JS库。

您只需要以下代码即可在twig模板上呈现Flash消息:

{{ render_flash_alerts() }}

可通过获取 https://github.com/rasanga/FlashAlertBundle
https://packagist.org/packages/ras/flash-alert-bundle