如何使用Symfony解决URL中的传递ID

问题描述 投票:0回答:3

我正在制作一个应用程序来与医生预约,在患者的模板中,我需要在路径中使用实体医生的ID,因为我在控制器的代码中使用它,我仍然无法获得实体医生的身份证明,因为当我{{doctor.id}}我的屏幕上没有任何内容时,内容为空。

作为一个解决方案,我在URL中使用了医生的电子邮件,但它非常难看。

这是控制器的代码

     /**
      * @Route("/patient/ajouter-medecin-favoris/{id}", name="meet_my_doc_ajouter_medecin_favoris")
      */
      public function ajouterMedecinFavoris(MedecinRepository $repoMedecin, ObjectManager $manager, $id)
      {
        $patient = $this->getUser();

        $medecin = $repoMedecin->findOneById($id);

        $patient->addMedecinsFavori($medecin);

        $manager->persist($patient);

        $manager->flush();

        return $this->RedirectToRoute('accueil');
      }

这是我用来点击它以先在控制器上重定向的元素的代码

<fieldset>
     <h4><a href="{{path('meet_my_doc_ajouter_medecin_favoris',{id: medecin.id})}}" style="color: black;"><i class="fa fa-star"></i></a> Dr. {{ medecin.nom }} {{ medecin.prenom }}</h4>
</fieldset>

我希望能够在URL中使用医生的ID,但我认为当您作为实体登录时,您无法获得其他用户的ID(而不是用于登录的ID)以及其他用户的内容。变量是空的。但是我知道是否有使用ID的解决方案,因为将电子邮件传递到url不是我想要的解决方案,并且我在其他实体的空代码中遇到了同样的问题。

这是将数据发送到视图的控制器的代码

     /**
      * @Route("/patient/medecins-favoris", name="meet_my_doc_afficher_medecin_favoris")
      */
      public function afficherMedecinFavoris()
      {
        $patient = $this->getUser();

        $medecins = $this->getUser()->getMedecinsFavoris();

        return $this->Render('meet_my_doc/afficherLesMedecinsFavoris.html.twig', ['medecins' => $medecins]);
      }
symfony path twig
3个回答
0
投票

试试这个

{{path('meet_my_doc_add_favorite_medicin',{(id):medecin.id})}}


0
投票

我会做这样的事情,第一个控制器接收像这样的医学对象,在这种情况下你不需要使用$ medecin = $ repoMedecin-> findOneById($ id);

 /**
  * @Route("/patient/ajouter-medecin-favoris/{id}", name="meet_my_doc_ajouter_medecin_favoris")
  */
  public function ajouterMedecinFavoris(MedecinRepository $repoMedecin, ObjectManager $manager, Medecin $medecin)
  {
       $patient = $this->getUser();
       $patient->addMedecinsFavori($medecin);

       $manager->persist($patient);
       $manager->flush();

       return $this->RedirectToRoute('accueil');
  }

在这两种情况下你都会做这样的事情

{% for medecin in medecins %}
    <fieldset>
          <h4>
              <a href="{{ path('meet_my_doc_ajouter_medecin_favoris', {'id': medecin.id }) }}" style="color: black;"><i class="fa fa-star"></i></a>
              Dr. {{ medecin.nom }} {{ medecin.prenom }}
          </h4>
     </fieldset>
{% endfor %}

0
投票

如果你的代码是你粘贴它的方式,那么我认为问题在于一个错字 - 在afficherMedecinFavoris()动作中你将medicins传递给视图,在视图中你试图访问medicin的id。因此,要么删除s中的额外afficherMedecinFavoris(),要么将额外的s添加到路径id参数值。

除此之外,我认为这应该有效(在Medecin实体的身份字段为id的条件下):

/**
 * @Route("/patient/ajouter-medecin-favoris/{id}", name="meet_my_doc_ajouter_medecin_favoris")
 */
public function ajouterMedecinFavoris(Medecin $medecin)
{
    $patient = $this->getUser();
    $patient->addMedecinsFavori($medecin);

    $manager = $this->getDoctrine()->getManager();
    $manager->persist($patient);
    $manager->flush();

    return $this->RedirectToRoute('accueil');
}

要知道Medecin实体如何作为控制器的参数读取this


0
投票

我很抱歉刚刚发布答案,但这对我有用:medecin继承用户,所以当我创建一个medecin时,它也创建了一个用户,都有相同的Id,如果我想要的话要使用medecin对象的Id,我需要编辑getId()并用parent :: getId()替换代码,这是我找到解决这个问题的唯一方法。

© www.soinside.com 2019 - 2024. All rights reserved.