尝试在使用userfrosting时将php嵌入到我的twig文件中

时间:2015-12-22 10:13:26

标签: php model-view-controller twig slim userfrosting

我需要在我的用户缓存网站中包含某种形式的API调用,但是我发现很难找到一种方法来执行此操作。 我已经看到将PHP添加到twig文件的方法之一是创建一个扩展,但这似乎不是我正在寻找的。

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

TIA

2 个答案:

答案 0 :(得分:2)

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

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

Guzzle Docs

然后在你的controller包含guzzle:

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

然后你可以用:

开始
$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!'
    ]
]);

还建议将try中的最后一位换行并捕获guzzle / http异常。

如果您的回复是JSON文档,则可以使用以下内容将内容检索到数组中:

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

答案 1 :(得分:1)

我在我的路由调用的控制器内的用户缓冲设置中与API通信,然后将该数据传递给我的模板。查看first tutorial有关如何创建新模板并将数据传递给它的信息。在路线中使用PHP做任何事情(通过控制器)。