Symfony 3.4 - 在DB中发布/保存信息后重定向无法正常工作

时间:2018-03-12 20:50:53

标签: php symfony

我有以下控制器方法,它创建一个新的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实体正在正确保存到数据库中。

1 个答案:

答案 0 :(得分:1)

您应该返回重定向响应尝试

 return $this->redirectToRoute('_admin_category', ['page' => 1]);

Redirect方法创建RedirectResponse类的对象,需要将其作为响应返回。此外,您不必使用redirect + generateUrl,您只需使用redirectToRoute方法即可。

另外我建议用try / catch

包装flush

有关详情,请参阅docs