is there a way to automatically have a Guzzle Service Descriptor field, take an array, and it’ll parse it to a comma list?
Data
Array [ "test", "another test" ]
Service Descriptors
{ "name": "YouTube", "baseUrl": "https://www.googleapis.com", "apiVersion": "v3", "description": "YouTube GData Graph API", "operations": { "GetVideos": { "httpMethod": "GET", "uri": "/youtube/v3/videos", "parameters": { "id": { "type":"array", "location":"query", "required": true }, "part": { "location": "query", "default": "snippet" }, "key": { "location": "query", "default": "{MY KEY}", "static": true }, "maxResults": { "location": "query", "default": 50 } } } } }
The field is the id
under parameters
, I’d like to provide the raw php array of strings to that, and have Guzzle automatically convert that to a comma deliminated list
Right now, I have to do this:
$command = $this->client->getCommand('GetVideos', [ 'id' => implode(",", array_slice($this->id, 0, 50)) ]);
Right now, that creates a URL with multiple instances of id
https://www.googleapis.com/youtube/v3/videos?id=test&id=another%20test&part=snippet&key={MY KEY}&maxResults=50
and I want it to come out like:
https://www.googleapis.com/youtube/v3/videos?id=test,another%20test&part=snippet&key={MY KEY}&maxResults=50
Is this possible?
Advertisement
Answer
Guzzle 3 constructs querystrings from a Query
object, which has an aggregator. By calling ->setAggregator($aggregator)
on the Query
, you can override the default behavior. You want to give it an instance of GuzzleHttpQueryAggregatorCommaAggregator
.
There isn’t much in the Guzzle docs about it, but there is a brief mention.