我只是设置了一个简单的应用程序,它似乎工作正常。我的 createAction() 看起来像这样:
public function createAction()
{
$entity = new Pokemon();
$request = $this->getRequest();
$form = $this->createForm(new PokemonType(), $entity);
$form->bindRequest($request);
if ($entity->getName() == "pikachu")
{
$this->container->get("session")->setFlash("error", "Pikachu is not allowed");
$url = $this->getRequest()->headers->get("referer");
return new RedirectResponse($url);
}
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('pokemon_show', array('id' => $entity->getId())));
}
return $this->render('BulbasaurBundle:Pokemon:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView()
));
}
流程如下:
- 用户导航到 /new
- 用户输入的“皮卡丘”选项无效
- 用户点击提交(POST 到 /create)
- 应用程序拒绝该条目,添加 Flash 消息,并重定向回 /new
- 用户看到 /new 和 flash 消息
需要检查的几件事:
也就是说,如果一切都失败了,你可以只使用控制器的 redirect() 方法来管理重定向:
public function createAction()
{
...
return $this->redirect($this->generateUrl("pokemon_new"));
...
}