如何在guzzle中传递参数来删除请求

时间:2015-02-09 09:42:58

标签: php symfony curl

我使用guzzle作为http客户端来测试我的symfony api。

文档中提供了url选项,但如何通过userid& api id参数,这样就可以删除特定用户的特定记录。

当我用curl测试时

  

curl -i -X DELETE http://localhost/us/serenify/web/app_dev.php/userapi/delete/1/6

我的api工作正常,显示出适当的回应。

但我无法用guzzle进行测试,因为我无法找到传递参数的选项。

1 个答案:

答案 0 :(得分:0)

以下是定义和执行Symfony路由的示例:

{
    "operations": {
        "deleteEntity": {
            "httpMethod": "DELETE",
            "uri": "/userapi/delete/{userid}/{apiid}",
            "summary": "Deletes an entity",
            "parameters": {
                "userid": {
                    "location": "query"
                },
                "apiid": {
                    "location": "query"
                }
            }
        }
    }
}

和代码:

class MyApi
{
    protected $client;

    public function __construct(ClientInterface $client, $baseUrl)
    {
        $this->client = $client;

        //tell the client what the base URL to use for the request
        $this->client->setBaseUrl($baseUrl);

        //fill the client with all the routes
        $description = ServiceDescription::factory("/path/to/routes.json");
        $this->client->setDescription($description);
    }

    public function deleteEntity($userId, $apiId)
    {
        $params = array(
            'userid' => $userId,
            'apiid' => $apiId
        );

        $command = $this->client->getCommand('deleteEntity', $params);
        $command->prepare();

        $response = $this->client->execute($command);

        return $response;
    }
}

$client = new Guzzle\Service\Client();

$api = new MyApi($client, ' http://localhost/us/serenify/web/app_dev.php');
$api->deleteEntity(1, 6);

现在,按照目前的情况,生成的路线看起来像

<强> http://localhost/us/serenify/web/app_dev.php/userapi/delete?userid=1&apiid=6

如果您希望参数不被Guzzle作为查询参数传递,而是像URL参数一样,您只需将JSON定义文件中的类型从查询更改为 URI

PS:我没有测试上面的代码。可能是开箱即用的工作,也可能不是。可能需要进行一些小调整。