2015-12-22 2 views
2

Мне нужно включить какую-то форму вызова API на моем сайте userfrosting, однако мне трудно найти способ сделать это. Я видел, что один из способов добавить PHP в файлы twig - это создать расширение, но, похоже, это точно не то, что я ищу.Попытка встраивания php в мои файлы twig при использовании userfrosting

Мне нужно иметь возможность извлекать данные с помощью стороннего API, с которым я ранее пользовался PHP для совершения звонков, однако, если кто-либо из вас подумает, что я должен использовать другой метод для этого, я открыт для предложений

TIA

+0

Расширение кажется, решение. Возможно, объясните проблему немного подробнее. – Cerad

+0

Что это за API? Вообще говоря, вы должны иметь возможность сделать свой вызов API в контроллере ** **, а затем передать любой контент, полученный из этого API, в ваш шаблон через вызов 'render'. – alexw

ответ

1

Я разговариваю с API в моей пользовательской настройке в контроллере, который называется моим маршрутом, а затем передает эти данные в мой шаблон. Просмотрите first tutorial о том, как создать новый шаблон и передать ему данные. Сделайте что-нибудь с PHP, что вам нужно в пределах маршрута (через контроллер).

+0

Спасибо! Работал шармом! –

+1

Прохладный. Дайте мне «правильный ответ», если сможете. Поймайте нас в чат для более неформальной помощи –

2

Для Userfrosting> 4.1, в файле посыпьте/composer.json, добавить требование включить жрать:. "require": {"guzzlehttp/guzzle": "~6.0"}

(не забудьте запустить composer update установить новую зависимость

Guzzle Docs

Затем в controller включают жрать:

use GuzzleHttp\Client; 
use GuzzleHttp\Exception\RequestException; 
use GuzzleHttp\Exception\ConnectException; 

то вы можете начать жрать с: (. Я поставил свой апи хозяин в посыпать конфигурации, используя переменную окружения, поэтому его не зашиты)

$client = new Client([ 
    'base_uri' => $config['api']['host'].'/', 
    'timeout' => 5 // your timeout param 
]); 

вы можете сделать запрос POST следующим , возвращая ответ в переменную.

$api_response = $client->post('your_api_route', [ 
    'json' => [ 
     'api_param_1' => 'Hello', 
     'api_param_2' => 'World!' 
    ] 
]); 

Также Рекомендуемые обертке последний бит в try и поймать исключения жрать/HTTP.

Если ваш ответ является документом JSON, вы можете извлечь содержимое в массив с:

$data = json_decode($api_response->getBody()->getContents(), true);