Как разрешить передачу идентификаторов в URL с помощью Symfony

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

где взять объект medecin в шаблоне?

Yassine CHABLI 05.04.2019 02:33

пожалуйста, покажите функцию, которая отображает шаблон. похоже, что вы показываете медицину, у которой нет имеют идентификатора.

Jakumi 05.04.2019 05:29

Я отредактировал сообщение и проверил базу данных, у медика действительно есть идентификатор, я просто не могу вывести его на экран, когда я зарегистрирован как пациент.

AlexandreLemoine 05.04.2019 13:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
1 800
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

попробуй это

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

medecin.id пуст
Yassine CHABLI 05.04.2019 02:32

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

в twig в обоих случаях вы делаете что-то вроде этого

{% 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 %}

Как контроллер сопоставляет идентификатор в URL-адресе и $medecin?

AlexandreLemoine 05.04.2019 16:29

Если ваш код такой, как вы его вставили, то я думаю, что проблема заключается в опечатке - в действии 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 доступен в качестве аргумента для контроллера, прочитайте это

Я не вставлял весь код представления, он действительно большой, но проблема не в s, потому что я использую for: {% for medecin in medecins %} для извлечения каждой строки вкладки и проблема не в этом методе тоже, потому что метод отлично работает с id в url, проблема в том, чтобы сделать путь с id текущего medecin в шаблон, потому что в for, когда я делаю medecin.id , ничего не печатается

AlexandreLemoine 06.04.2019 15:06

Часть с medecin.nom и medecin.prenom отображается правильно? Можете ли вы вставить класс Medecin?

Michał Tomczuk 06.04.2019 16:58
Ответ принят как подходящий

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

Другие вопросы по теме