Я не могу изменить URL моей новой страницы во время перенаправления - PullRequest
1 голос
/ 01 апреля 2019

В symfony 3.4 я бы хотел вызвать другую функцию из моего контроллера. Вызываемая функция должна будет перенаправить на новую страницу. Я хотел бы, чтобы URL страницы был изменен.

Однако при использовании метода, который я использовал, страница меняется хорошо, но не URL.

Схема была следующая:

  1. Контроллер => Функция => Показать форму входа (ветка)
  2. Форма входа => Проверка (POST METHOD) => Контроллер => Функция => Вызов другой функции => Отображение другой страницы (и изменение URL).

URL не изменился, я не понимаю.

Вот мой код:

Контроллер:

<?php

namespace Site\PagesBundle\Controller;

use Site\PagesBundle\Entity\User;
use Site\PagesBundle\Entity\Information;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

/**
 * Information controller.
 *
 * @Route("accueil")
 */
class DefaultController extends Controller
{

    /**
     * Accueil
     *
     * @Route("/", name="connexion_index")
     * @Method({"GET", "POST"})
     */
    public function indexAction(Request $request)
    {

        $em = $this->getDoctrine()->getManager(); //Récupération du manager

        $listeInfos = $em->getRepository('PagesBundle:Information')->getInformationsZone("Zone 1"); //Récupération d'une liste d'informations

        $user = new User(); //Initialisation de l'objet User
        $form = $this->createForm('Site\PagesBundle\Form\ConnexionType', $user); //Formulaire de création
        $form->handleRequest($request);

        //Traitement si le formulaire est soumis ( Ajout du package dans la BDD )
        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($user);

            $valide = $this->getDoctrine()->getManager()->getRepository('PagesBundle:User')->authentifier($user->getIdentifiant(),$user->getPassword());
            dump($valide);

            if($valide == 1)
            {
                return $this->accueil($request);
            }

            else
            {
                return $this->render('@Pages/Default/connexion.html.twig',array(
                    'user' => $user,
                    'form' => $form->createView(),
                    'listeInfos' => $listeInfos,
                ));
            }

            // On ajoute un package, donc on offre un téléchargement supplémentaire aux utilisateurs concernés
            $this->getDoctrine()->getManager()->getRepository('PagesBundle:User')->updateNbDDLAll("inc"); 

            //return $this->redirectToRoute('paquets_index'); // Redirection page de gestion de packages
        }



        return $this->render('@Pages/Default/connexion.html.twig',array(
            'user' => $user,
            'form' => $form->createView(),
            'listeInfos' => $listeInfos,
        ));
    }

    /**
     * @Route("/index", name="accueil")
     * @Method("GET")
     */
    public function accueil(Request $request)
    {
        $em = $this->getDoctrine()->getManager(); //Récupération du manager

        $listeInfos = $em->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2"); //Récupération d'une liste d'informations

        return $this->render('@Pages/Default/accueil.html.twig',array(
            'listeInfos' => $listeInfos,
        ));
    }
}

Изменение должно произойти здесь:

if($valide == 1)
        {
            return $this->accueil($request);
        }

К

/**
     * @Route("/index", name="accueil")
     * @Method("GET")
     */
    public function accueil(Request $request)
    {
        $em = $this->getDoctrine()->getManager(); //Récupération du manager

        $listeInfos = $em->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2"); //Récupération d'une liste d'informations

        return $this->render('@Pages/Default/accueil.html.twig',array(
            'listeInfos' => $listeInfos,
        ));
    }

Спасибо за вашу помощь

1 Ответ

1 голос
/ 01 апреля 2019

Вы не перенаправляете на другой путь, а только возвращаете view в контроллере indexAction. Поскольку текущий URL уже соответствует этому action, в URL не вносятся никакие изменения. Если вы хотите перейти к другому пути, вы должны указать Symfony сделать это.

if($valide == 1)
{
    return $this->redirectToRoute('accueil');
}

Ваша функция accueil также должна быть action.

/**
 * @Route("/index", name="accueil")
 * @Method("GET")
 */
public function accueilAction(Request $request)
{
    $em = $this->getDoctrine()->getManager(); //Récupération du manager

    $listeInfos = $em->getRepository('PagesBundle:Information')->getInformationsZone("Zone 2"); //Récupération d'une liste d'informations

    return $this->render('@Pages/Default/accueil.html.twig',array(
            'listeInfos' => $listeInfos,
        ));
}
...