【问题标题】:I can not change the URL of my new page during a redirect在重定向期间我无法更改新页面的 URL
【发布时间】:2019-08-22 15:43:10
【问题描述】:

在 symfony 3.4 上,我想从我的控制器调用另一个函数。被调用的函数必须重定向到新页面。我想修改页面的 URL。

但是,使用我使用的方法,页面更改得很好,但 URL 没有。

方案如下:

  1. 控制器 => 功能 => 显示登录表单 (twig)
  2. 登录表单 => 验证(POST METHOD)=> 控制器 => 函数 => 调用其他函数 => 显示其他页面(以及 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,
        ));
    }

感谢您的帮助

【问题讨论】:

    标签: php symfony redirect routes


    【解决方案1】:

    您没有重定向到另一个路径,而只是在控制器indexAction 中返回view。由于当前 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,
            ));
    }
    

    【讨论】:

    • 感谢您的回答!哦,是的,我现在理解得更好了,我完全忘记了“行动”的概念。此外,在什么情况下我应该在我的方法末尾添加“动作”?谢谢!
    • 仅当方法对应于url中的路径时。更多信息可以在这里找到:symfony.com/doc/3.4/routing.html
    猜你喜欢
    • 2019-03-09
    • 2016-05-27
    • 2014-01-23
    • 2016-01-12
    • 2014-09-17
    • 1970-01-01
    • 2013-10-12
    • 2017-02-24
    • 2017-08-06
    相关资源
    最近更新 更多