我有以下控制器方法,它创建一个新的Category
实体并将其持久保存到数据库中:
/**
* @param Request $request
*
* @return array
*
* @Route("/admin/category/new", name="_admin_category_new")
* @Method({"GET", "POST"})
* @Template("Admin/category_new.html.twig")
*/
public function newCategoryAction(Request $request)
{
$category = new Category();
$form = $this->createForm(CategoryType::class, $category);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($category);
if (!$category->getSlug()) {
$category->setSlug();
}
if ($category->getFile() != null) {
$um = $this->get('stof_doctrine_extensions.uploadable.manager');
$um->markEntityToUpload($category, $category->getFile());
}
$em->flush();
$this->addFlash('success', 'Category successfully created');
$this->redirect($this->generateUrl('_admin_category', array('page' => 1)));
}
return array('form' => $form->createView());
}
成功完成后,应该将用户重定向到其他URL。相反,它只是重新显示当前页面/表单。有任何想法吗?路线_admin_category
确实存在,并且正在运行:
$ bin/console debug:router
...
_admin_category GET ANY ANY /admin/category/{page}
...
我的Category
实体正在正确保存到数据库中。
答案 0 :(得分:1)
您应该返回重定向响应尝试
return $this->redirectToRoute('_admin_category', ['page' => 1]);
Redirect方法创建RedirectResponse类的对象,需要将其作为响应返回。此外,您不必使用redirect + generateUrl,您只需使用redirectToRoute方法即可。
另外我建议用try / catch
包装flush有关详情,请参阅docs