Symfony 3.4 - перенаправление после публикации / сохранения информации в БД не работает

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

Думаю, нужно вернуть редирект, iirc.

Don't Panic 12.03.2018 21:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
501
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны вернуть ответ на перенаправление попробуйте

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

Метод Redirect создает объект класса RedirectResponse, и его нужно вернуть в качестве ответа. Более того, вам не нужно использовать redirect + generateUrl, вы можете просто использовать метод redirectToRoute, который является ярлыком для этого.

Также я бы предложил обернуть флеш с помощью try / catch

Для получения дополнительной информации см. документы.

Я знаю, что это не по теме, почему вы предлагаете добавить try / catch для очистки? Что бы вы сделали, если бы его действительно поймали? Тот же вопрос я задаю своей собаке, когда она гоняется за машинами.

Cerad 12.03.2018 22:12

Это зависит от вашей бизнес-логики, в моем приложении я регистрирую ошибку с контекстом, я предоставляю более удобное сообщение, и если это возможно (иногда это возможно), я пытаюсь делать то, что может помочь на самом деле запустить код. Например, если вы получите исключение db, это может произойти, потому что db был временно недоступен.

Robert 12.03.2018 22:18

Спасибо за этот быстрый ответ, я просто столкнулся с той же проблемой и ударил себя, когда увидел ваш ответ и понял, что я сделал!

porl 21.12.2020 00:46

Другие вопросы по теме