2

我需要在我的 userfrosting 站点中包含某种形式的 API 调用,但是我发现很难找到一种方法来做到这一点。我已经看到将 PHP 添加到 twig 文件的一种方法是创建一个扩展,但这似乎并不是我正在寻找的。

我需要能够使用我以前使用 PHP 进行调用的第三方 API 来提取数据,但是如果你们中的任何人认为我应该使用不同的方法来执行此操作,我愿意接受建议

TIA

4

2 回答 2

2

对于 Userfrosting >4.1,在您的 splash/composer.json 文件中,添加包含 Guzzle 的要求: "require": {"guzzlehttp/guzzle": "~6.0"}

(记得运行composer update安装新的依赖。

Guzzle 文档

然后在你的控制器中包含 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);
于 2017-07-20T17:50:06.033 回答
1

我在路由调用的控制器中的用户霜冻设置中与 API 对话,然后将该数据传递给我的模板。查看有关如何创建新模板并将数据传递给它的第一个教程。用 PHP 做任何你需要在路由中做的事情(通过控制器)。

于 2015-12-22T15:33:28.253 回答