У меня есть следующий метод контроллера, который создает новый объект 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 правильно сохраняются в БД.






Вы должны вернуть ответ на перенаправление попробуйте
return $this->redirectToRoute('_admin_category', ['page' => 1]);
Метод Redirect создает объект класса RedirectResponse, и его нужно вернуть в качестве ответа. Более того, вам не нужно использовать redirect + generateUrl, вы можете просто использовать метод redirectToRoute, который является ярлыком для этого.
Также я бы предложил обернуть флеш с помощью try / catch
Для получения дополнительной информации см. документы.
Я знаю, что это не по теме, почему вы предлагаете добавить try / catch для очистки? Что бы вы сделали, если бы его действительно поймали? Тот же вопрос я задаю своей собаке, когда она гоняется за машинами.
Это зависит от вашей бизнес-логики, в моем приложении я регистрирую ошибку с контекстом, я предоставляю более удобное сообщение, и если это возможно (иногда это возможно), я пытаюсь делать то, что может помочь на самом деле запустить код. Например, если вы получите исключение db, это может произойти, потому что db был временно недоступен.
Спасибо за этот быстрый ответ, я просто столкнулся с той же проблемой и ударил себя, когда увидел ваш ответ и понял, что я сделал!
Думаю, нужно вернуть редирект, iirc.