Symfony2 - 如何执行外部请求

2022-08-30 15:27:53

使用Symfony2,我需要访问基于HTTPS的外部API。

如何调用外部 URI 并管理响应以“播放”它。例如,呈现成功或失败消息?

我在想这样的事情(注意,performRequest是一种完全发明的方法):

$response = $this -> performRequest("www.someapi.com?param1=A&param2=B");

if ($response -> getError() == 0){
    // Do something good
}else{
    // Do something too bad
}

我一直在阅读有关Buzz和其他客户的信息。但我想Symfony2应该能够自己做到这一点。


答案 1

我建议使用 CURL:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'www.someapi.com?param1=A&param2=B');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); // Assuming you're requesting JSON
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($ch);

// If using JSON...
$data = json_decode($response);

注意:Web 服务器上的 php 必须安装该库。php5-curl

假设 API 请求返回 JSON 数据,此页面可能很有用。

这不使用任何特定于 Symfony2 的代码。可能有一个捆绑包可以为你简化这个过程,但如果有的话,我不知道它。


答案 2

Symfony没有为此提供内置服务,但这是使用依赖注入框架创建自己的服务的绝佳机会。您可以在此处执行的操作是编写一个服务来管理外部调用。我们将服务称为“http”。

首先,用一个方法编写一个类:performRequest()

namespace MyBundle\Service;

class Http
{    
    public function performRequest($siteUrl)
    {
        // Code to make the external request goes here
        // ...probably using cUrl
    }
}

在以下位置将其注册为服务:app/config/config.yml

services:
    http:
        class: MyBundle\Service\Http

现在,您的控制器可以访问名为“http”的服务。Symfony 在“容器”中管理此类的单个实例,您可以通过以下方式访问它:$this->get("http")

class MyController
{
    $response = $this->get("http")->performRequest("www.something.com");

    ...
}

推荐