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

时间:2019-04-04 22:24:53

标签: symfony path twig

我正在制作一个与医生约会的应用,在患者的模板中,我需要在路径中使用实体医生的ID,因为我在控制器的代码中使用了它,而且我仍然可以无法获得实体医生的ID,因为当我做{{doctor.id}}时,屏幕上什么都没显示,内容为空。

作为一种解决方案,我在URL中使用了医生的电子邮件,但这很丑陋。

这是控制器的代码

{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.         -0.95959596 -0.91919192 -0.87878788 -0.83838384 -0.7979798\n",
      " -0.75757576 -0.71717172 -0.67676768 -0.63636364 -0.5959596  -0.55555556\n",
      " -0.51515152 -0.47474747 -0.43434343 -0.39393939 -0.35353535 -0.31313131\n",
      " -0.27272727 -0.23232323 -0.19191919 -0.15151515 -0.11111111 -0.07070707\n",
      " -0.03030303  0.01010101  0.05050505  0.09090909  0.13131313  0.17171717\n",
      "  0.21212121  0.25252525  0.29292929  0.33333333  0.37373737  0.41414141\n",
      "  0.45454545  0.49494949  0.53535354  0.57575758  0.61616162  0.65656566\n",
      "  0.6969697   0.73737374  0.77777778  0.81818182  0.85858586  0.8989899\n",
      "  0.93939394  0.97979798  1.02020202  1.06060606  1.1010101   1.14141414\n",
      "  1.18181818  1.22222222  1.26262626  1.3030303   1.34343434  1.38383838\n",
      "  1.42424242  1.46464646  1.50505051  1.54545455  1.58585859  1.62626263\n",
      "  1.66666667  1.70707071  1.74747475  1.78787879  1.82828283  1.86868687\n",
      "  1.90909091  1.94949495  1.98989899  2.03030303  2.07070707  2.11111111\n",
      "  2.15151515  2.19191919  2.23232323  2.27272727  2.31313131  2.35353535\n",
      "  2.39393939  2.43434343  2.47474747  2.51515152  2.55555556  2.5959596\n",
      "  2.63636364  2.67676768  2.71717172  2.75757576  2.7979798   2.83838384\n",
      "  2.87878788  2.91919192  2.95959596  3.        ]\n"
     ]
    }
   ],
   "source": [
    "%run -i temp.py"
   ]
  }
 ],
 "metadata": {},
 "nbformat": 4,
 "nbformat_minor": 2
}

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

     /**
      * @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');
      }

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

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

<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>

4 个答案:

答案 0 :(得分:0)

尝试

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

答案 1 :(得分:0)

我会做这样的事情,第一个控制器接收这样的Medicine Object,在这种情况下,您不需要使用$ 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 %}

答案 2 :(得分: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

答案 3 :(得分:0)

很抱歉,现在才发布答案,但这对我来说是这样的:medecin继承自User,因此,当我创建一个medecin时,它还在创建一个User,两者都具有相同的ID,并且如果要使用medecin对象的ID,则需要编辑getId()并用parent :: getId()替换代码,这是我发现解决此问题的唯一方法。