在guzzle中通过查询字符串发送数组

Pet*_*jci 11 php rest restful-url query-string guzzle

Guzzle客户端默认从此代码创建

$client->get('https://example.com/{?a}', array('a' => array('c','d')));
Run Code Online (Sandbox Code Playgroud)

这个网址

https://example.com/?a=c,d
Run Code Online (Sandbox Code Playgroud)

在RESTful应用程序中在查询字符串中发送数组的最佳做法是什么?问题是,如何在服务器端确定c,d是字符串还是数组?使用方括号发送数组不是更好a[]=c&a[]=d吗?如何设置Guzzle使用方括号?或者最好使用JSON编码变量?在服务器端,我正在使用Tonic.

Dun*_*ung 5

工作解决方案:

$vars = array('state[]' => array('Assigned','New'), 'per_page' => $perPage, 'page' => $pageNumber);
$query = http_build_query($vars, null, '&');
$string = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query); // state[]=Assigned&state[]=New
$client = new Client([follow instruction to initialize your client ....]);
$response = $client->request('GET', $uri, ['query' => $string]);
Run Code Online (Sandbox Code Playgroud)

现在,您的请求中具有相同的名称参数。

粪。

来源:具有相同名称参数的http_build_query


Ann*_*nna 5

Guzzle 有一个您可以使用的辅助函数,称为build_query(). 这使用 PHP 的http_build_query().

以下是如何使用它的示例:

$params = [
    'a[]' => [
        'c',
        'd'
    ],
    'page' => 1
];

$query = \GuzzleHttp\Psr7\build_query($params);

$response = $client->request('GET', 'https://example.com/', [
    'query' => $query
]);
Run Code Online (Sandbox Code Playgroud)


hol*_*ple 4

看来答案就在这里

我想做类似的事情?status[]=first&status[]=second

您可以在 Guzzle 中执行此操作,如上面的链接所示:

$client = new Client('http://test.com/api');    
$request = $client->get('/resource');    
$query = $request->getQuery();    
$query->set('status', array('first', 'second'));
Run Code Online (Sandbox Code Playgroud)