【问题标题】:Symfony 3 Redirect to another routhe with url parameterSymfony 3 使用 url 参数重定向到另一个路由
【发布时间】:2017-10-12 15:28:22
【问题描述】:

在我的 Symfony 3 项目中,我制作了以下控制器:

    /**
     * @Route("/person_in_need/{id}",name="person_in_need_view")
     */
    public function viewPersonInNeed(Request $request,$id)
    {

    }

我想从另一个控制器重定向它,例如:

    /**
     * @Route("/person_in_need/add",name="add_person_in_need")
     */
    public function addPersonInNeed(Request $request)
    {
        $form=$this->createForm(PersonInNeedType::class,new PersonInNeed());

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            /**
             * @var PersonInNeedBusinessLogicModel $dataInsert
             */
            $dataInsert=$this->get('app.person_in_need_business_model');
            $name=$form->get(PersonInNeedConstats::PERSON_IN_NEED_NAME)->getData();
            $surname=$form->get(PersonInNeedConstats::PERSON_IN_NEED_SURNAME)->getData();
            $reason=$form->get(PersonInNeedConstats::PERSON_IN_NEED_REASON)->getData();
            $dataInsert->registerPersonInNeed($name,$surname,$reason);
            //Pass id there
//          return $this->redirectToRoute('person_in_need_view');
        }

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

如何使用路由名称重定向和传递id 参数?

【问题讨论】:

    标签: symfony symfony-routing


    【解决方案1】:

    实际上你快完成了 ;) TL;DR 只需使用

    return $this->redirectToRoute('person_in_need_view', ['id' => $yourEntity->getId()]);
    

    我有点好奇你为什么通过$form->get('<FIELD_NAME>)->normData() 获取数据,但这可能是有原因的......

    我希望您已经为您的 PersonInNeed 实体配置了您的 PersonInNeedType。如果是这样,只需调用

    if ($form->isSubmitted() && $form->isValid()) {
        /** @var PersonInNeed personInNeed **/
        $personInNeed = $form->getData();
    
        //at the end...after persist and flush so your entity is stored in DB and you have an ID
        return $this->redirectToRoute('person_in_need_view', ['id' => $personInNeed->getId()]);
    }
    

    【讨论】:

      【解决方案2】:

      Link:

      这会使用 301 返回码重定向到客户端:

      $this->redirect(
          $this->generateUrl(
              'person_in_need_view',
              array('id' => $id)
          )
      );
      

      这会在内部重定向:

      $this->forward(
          'person_in_need_view',
          array('id' => $id)
      )
      

      【讨论】:

        猜你喜欢
        • 2017-03-18
        • 2016-11-20
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        • 1970-01-01
        • 2017-06-01
        • 1970-01-01
        相关资源
        最近更新 更多