我需要在我的 userfrosting 站点中包含某种形式的 API 调用,但是我发现很难找到一种方法来做到这一点。我已经看到将 PHP 添加到 twig 文件的一种方法是创建一个扩展,但这似乎并不是我正在寻找的。
我需要能够使用我以前使用 PHP 进行调用的第三方 API 来提取数据,但是如果你们中的任何人认为我应该使用不同的方法来执行此操作,我愿意接受建议
TIA
我需要在我的 userfrosting 站点中包含某种形式的 API 调用,但是我发现很难找到一种方法来做到这一点。我已经看到将 PHP 添加到 twig 文件的一种方法是创建一个扩展,但这似乎并不是我正在寻找的。
我需要能够使用我以前使用 PHP 进行调用的第三方 API 来提取数据,但是如果你们中的任何人认为我应该使用不同的方法来执行此操作,我愿意接受建议
TIA
对于 Userfrosting >4.1,在您的 splash/composer.json 文件中,添加包含 Guzzle 的要求:
"require": {"guzzlehttp/guzzle": "~6.0"}
(记得运行composer update
安装新的依赖。
然后在你的控制器中包含 guzzle:
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Exception\ConnectException;
然后你可以启动 guzzle :
$client = new Client([
'base_uri' => $config['api']['host'].'/',
'timeout' => 5 // your timeout param
]);
(我使用环境变量在洒配置中设置了我的 api 主机,因此它没有硬编码。)
然后,您可以按如下方式发出 POST 请求,将响应返回到变量中。
$api_response = $client->post('your_api_route', [
'json' => [
'api_param_1' => 'Hello',
'api_param_2' => 'World!'
]
]);
还建议将最后一位包装在 a 中try
并捕获 guzzle/http 异常。
如果您的响应是 JSON 文档,您可以使用以下命令将内容检索到数组中:
$data = json_decode($api_response->getBody()->getContents(), true);
我在路由调用的控制器中的用户霜冻设置中与 API 对话,然后将该数据传递给我的模板。查看有关如何创建新模板并将数据传递给它的第一个教程。用 PHP 做任何你需要在路由中做的事情(通过控制器)。