Доступ к остальному API изнутри контроллера и из ветки - PullRequest
0 голосов
/ 30 октября 2018

Я сделал API на api-платформе , сгенерированный URL выглядит следующим образом. (У меня Product сущность)

/api/product?id=3

Эта маршрутизация api генерируется api-platform. Так что я не знаю название маршрутизации.

Теперь я хочу получить доступ к этому API как из файла ветки, так и из контроллера.

1) В ветке, это должно быть так, как показано ниже, но где я могу найти имя маршрутизации ??

{{path('***')}}/product?id-3

2) В контроллере, как я могу получить доступ к API ??

Есть ли какая-нибудь помощь?

Моя среда Symfony 4.1, php 7.1

1 Ответ

0 голосов
/ 30 октября 2018

Ваш маршрут 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 .

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