Как решить передачу идентификаторов в URL с Symfony - PullRequest
0 голосов
/ 05 апреля 2019

Я делаю приложение, чтобы назначать встречи с врачами, и в шаблоне пациента мне нужно использовать идентификатор сущности доктора в пути, потому что я использую его в коде моего контроллера, и я все еще могуя не получаю идентификатор доктора сущностей, потому что когда я делаю {{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, но я думаю, что когда вы вошли как лицо, вы не можете получить идентификатор (не идентификатор, используемый для входа в систему) других пользователей.и содержимое переменной пусто.Но я бы знал, есть ли решение использовать идентификатор, потому что передача электронной почты в 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]);
      }

Ответы [ 4 ]

0 голосов
/ 11 июля 2019

Мне жаль публиковать ответ только сейчас, но вот как он работал для меня: medecin наследуется от User, поэтому, когда я создаю medecin, он создает также пользователя, как с тем же Id, так и если я хочу использовать идентификатор объекта medecin, мне нужно отредактировать getId () и заменить код на parent :: getId (), это единственный способ, который я нашел для решения этой проблемы.

0 голосов
/ 05 апреля 2019

Я бы сделал что-то вроде этого, первый контроллер, чтобы получить Объект Медицины, подобный этому, в этом случае вам не нужно использовать $ 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 голосов
/ 06 апреля 2019

Если ваш код соответствует тому, как вы его вставили, то я думаю, что проблема заключается в опечатке - в действии afficherMedecinFavoris(), которое вы передаете medicins представлению, и в представлении вы пытаетесь получить доступ к идентификатору medicin. Поэтому удалите лишние s в afficherMedecinFavoris() или добавьте лишние s к значению параметра идентификатора пути.

Кроме того, я считаю, что это должно работать (при условии, что поле идентификации для 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 голосов
/ 05 апреля 2019

попробуйте

{{путь ('meet_my_doc_ajouter_medecin_favoris', {(id): medecin.id})}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...