Symfony 4 Маршрут не соответствует - redirectToRoute ведет на текущую страницу - PullRequest
0 голосов
/ 23 марта 2020

Уважаемый интеллектуальный улей,

У меня возникли проблемы с перенаправлением в symfony 4. Конечно, я пытался найти похожий вопрос, но не нашел решения.

Я только начал изучать Symfony 4, пройдя некоторые уроки. (И Я ЛЮБЛЮ ЭТО !!!)

Программа представляет собой очень простой пример блога на локальном apache сервере (возможно, это важно). Список средств, Добавить, Показать

Так что моя проблема в методе добавления. После добавления статьи (которая отлично работает) я хочу использовать redirectToRout ('article_list'). Но это ни к чему не приведет, кроме как на странице добавления.

Когда я отлаживаю свои маршруты, я вижу правильные маршруты:

article_list               ANY      ANY      ANY    /article                          
article_delete             DELETE   ANY      ANY    /article/delete/{id}              
article_add                ANY      ANY      ANY    /article/add                      
article_show               ANY      ANY      ANY    /article/{id}

И все эти маршруты работают нормально, когда я набираю их вручную.

Функция добавления также довольно проста:

/**
     * @Route(
     * "/article/add", 
     * name="article_add",
     * )
     */
    public function add(Request $request)
    {
        $article = new Article();
        $form = $this->createFormBuilder($article)
            [...]
        ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()){
            $article = $form->getData();

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($article);

            $entityManager->flush();

            $this->redirectToRoute('article_list');
        }


        return $this->render('article/new.html.twig', array(
            'form' => $form->createView()
        ));
    }

Как и функция списка

/**
     * @Route(
     * "/article", 
     * name="article_list",
     * )
     */
    public function index()
    {
        $articles = $this->getDoctrine()->getRepository(Article::class)->findAll();
        return $this->render('article/list.html.twig', [
            'articles' => $articles,
        ]);
    }

Как вы можете видите, имя в аннотациях правильное.

Когда я меняю метод redirectToRoute на

redirectToRoute("/article");

, я получаю сообщение об ошибке «Невозможно сгенерировать URL для названного маршрута» / article "как таковой маршрут не существует. В журнале я вижу Matched route "article_add" Таким образом, маршрут" / article "был сопоставлен с маршрутом" article_add ". Это не то, что я ожидал ....

Так что у меня возникает ощущение, что что-то на странице добавления игнорирует мои маршруты.

У кого-нибудь есть идеи, какую простую проблему я не вижу?

Спасибо Я бы очень хотел понять, что здесь не так ...

1 Ответ

6 голосов
/ 23 марта 2020

Вы не возвращаете перенаправление. Сделайте это:

return $this->redirectToRoute('article_list');

Этот метод только создает ответ, и вам нужно явно вернуть.

...