为什么控制器执行了两次(flashbag,redireondeoute)?

时间:2015-09-30 13:47:36

标签: php symfony

我在yml中配置了两个/ alpha和/ beta路由。在alphaAction中,通知被放置在flashbag中并发生重定向。在betaAction中,读取flashbag中的通知。

有时候我在浏览器中尝试/ alpha时会收到2条通知,有时我会收到一条通知。

有人可以解释发生了什么,我做错了什么。

public function alphaAction()
{
  $this->get('session')->getFlashBag()->add("notice",mt_rand());
  return $this->redirectToRoute("beta");
}

public function betaAction()
{
  $notices= $this->get('session')->getFlashBag()->get('notice');    
  return new Response(implode($notices,", "));
}

1 个答案:

答案 0 :(得分:0)

使用add方法,我可以重现您描述的问题。可以使用set方法而非add(或setFlash)方法修复此问题。

public function alphaAction()
{
  $this->get('session')->getFlashBag()->set("notice",mt_rand());
  return $this->redirectToRoute("beta");
}

public function betaAction()
{
  $notices= $this->get('session')->getFlashBag()->get('notice');    
  return new Response(implode($notices,", "));
}