Мне нужно получить идентификатор (благодаря идентификатору я получу всю индивидуальную информацию, например, адрес электронной почты, номер телефона и т. д.), когда я нажму на имя базы данных людей.
<ul>
{% for quote in agency.quotes %}
<li><a href = "{{ path('user_individualQuote') }}"> {{ quote.prospect.fullname }}
</a></li>
{% endfor %}
</ul>
Это контроллер страницы:
/**
* @Route("/individualQuote", name = "user_individualQuote", methods = {"GET","POST"})
**/
public function getIndividualQuote(ProspectRepository $prospectRepository): Response
{
return $this->render('user/_individualQuote.html.twig', [
'prospect' => $prospectRepository->findAll(),
]);
}
Моя база данных:
Журнал исключений, запрос информации:




Похоже, что маршрут getIndividualQuote вернет все кавычки.
Один на @ParamConverter от SensioFrameworkExtraBundle. (Установить с помощью composer require sensio/framework-extra-bundle)
Итак, начните с этого -
<?php
use namespace App\Entity\Prospect; // Or wherever your Prospect class is
/**
* @Route("/individualQuote/{id}", name = "user_individualQuote", methods = {"GET","POST"})
**/
public function getIndividualQuote(Prospect $prospect): Response
{
return $this->render('user/_individualQuote.html.twig', [
'prospect' => $prospect
]);
}
Ключевое изменение заключается в том, что маршрут основан на анализе $id из URL-адреса и поиске Prospect на основе его идентификатора.
https://symfony.com/doc/current/routing.html#parameter-conversion
Затем вам нужно будет передать этот идентификатор в URL-адрес, указав некоторые дополнительные параметры вспомогательной функции twig path. {id: quote.prospect.id}.
<ul>
{% for quote in agency.quotes %}
<li>
<a href = "{{ path('user_individualQuote', {id: quote.prospect.id}) }}"> {{ quote.prospect.fullname }}</a>
</li>
{% endfor %}
</ul>
хорошая новость в том, что я наконец-то получил идентификатор в своем URL-адресе. Но я получил эту ошибку: «Аргумент 2, переданный в App\Controller\UserController::getIndividualQuote(), должен иметь тип int, указанная строка»
Что происходит, когда вы {{ dump(quote.prospect.id) }} где-то в своем шаблоне ветки?
Возможно, просто нужно преобразовать в int с помощью фильтра. :) ` <a href = "{{ path('user_individualQuote', {id: quote.prospect.id|int}) }}"> {{ quote.prospect.fullname }}</a>`
я пробовал дамп, но ошибка блокирует его. Я тоже пытался добавить "|int". Та же ошибка.
Не знаю, что означает "ошибка блокирует его". :(
Также мой адрес выглядит так: 127.0.0.1:8000/user/individualQuote/%7B%24id%7D?id=42
извините, это значит, что дамп, вероятно, скрыт за исключением
Понятно, похоже, что метод маршрута вашего контроллера не улавливает параметр id. Позвольте мне изменить мой ответ немного больше информации!
хорошо, спасибо, я только что отредактировал свой пост (добавьте новый экран запроса информации в исключение), если это может помочь
Хм,. а если просто поставить {{ path('user_individualQuote', quote.prospect.id) }}?
такой же. Ничего не меняется. Я также пытался удалить "id:quote.prospect.id", тоже ничего не изменилось.
О, подождите, исключение почти такое же («должно быть типа массива, задано int, вызвано») Я также пытался удалить «id:quote.prospect.id», тоже ничего не изменилось.
Боюсь, вы должны начать с основной статьи и дойти до этого!
о, и дамп работает, и я получил нормальный URL-адрес (127.0.0.1:8000/user/individualQuote/42). Он показывает мне идентификатор каждого имени. Хорошо, да, я так думаю. Хорошо, что у меня есть удостоверение личности. Я постараюсь найти проблему. Спасибо за вашу помощь.
наконец-то это работает, я просто меняю «ProspectRepository на Prospect $ prospect». Большое спасибо за вашу помощь @Cameron
Это то, что я сделал в своем отредактированном ответе! Вы бы согласились? :)
Да, это именно то, что в вашем отредактированном ответе!
Может начать здесь.