Ваш маршрут API имеет имя в Symfony, это то, что вы должны использовать внутри пути. Вы можете найти его, используя инструменты отладки, предоставляемые Symfony, например ::10000
bin/console router:match "/api/product?id=3"
Это должно сказать вам, какой маршрут соответствует пути, и отобразить имя, например, api_product_show
. Если предположить, что это фактическое имя маршрута, то в вашем шаблоне вы, вероятно, можете получить к нему доступ:
{{ path('api_product_show', { 'id': 3 }) }}
Вы также можете использовать другую команду, чтобы получить список всех маршрутов в вашем приложении, а затем найти правильный:
bin/console debug:router
Он должен дать вам как название маршрута, так и шаблон, но шаблон может быть не так легко различим, как при использовании router:match
на пути.
Доступ к API с вашего контроллера может быть выполнен несколькими способами. Обычно вам понадобится HTTP-клиент. Существует библиотека под названием httplug
, которая предоставит вам общий интерфейс для различных клиентов, таких как жрет, гудит или завивается.
При этом вы просто внедряете клиент или получаете его из контейнера, используя:
$client = $this->container->get('httplug.client');
Затем вы можете отправить запрос и зачитать ответ. Имейте в виду, что вы получите JSON-полезную нагрузку, а не фактический объект Product. Вы можете использовать сериализатор для создания объекта из данных json, но он не подключен к вашему ORM (Doctrine) и, скорее всего, даст странный результат, если вы попытаетесь его сохранить.
Поскольку вы находитесь в своем собственном приложении, вы можете даже не захотеть проходить через API в вашем контроллере и вместо этого использовать Entity напрямую через Doctrine .