Parris Varney
Parris Varney

Reputation: 11478

Default form_params for guzzle 6

Is there a way to globally add form_params to all requests with guzzle 6?

For example:

$client = new \GuzzleHttp\Client([
    'global_form_params' => [ // This isn't a real parameter 
        'XDEBUG_SESSION_START' => '11845',
        'user_token' => '12345abc',
    ]
]);

$client->post('/some/web/api', [
    'form_params' => [
        'some_parameter' => 'some value'
    ]
]);

In my ideal world, the post would have the result of array_merge-ing global_form_params and form_params:

[
    'XDEBUG_SESSION_START' => '11845',
    'user_token' => '12345abc',
    'some_parameter' => 'some value',
]

I can see also wanting something like this for query or json

Upvotes: 3

Views: 2067

Answers (1)

Shaun Bramley
Shaun Bramley

Reputation: 2047

According to Creating a client you can set "any number of default request options" and on the GuzzleHttp\Client Source Code

$client = new Client['form_params' => [form values],]);

would apply your form_params to every request.

This could create issues with GET requests due to the Content-Type header being changed within Client::applyOptions. It would ultimately depend on server configuration.

If your intentions are to have the client make both GET and POST requests then you might be better served by moving the form_params into middleware. For example:

$stack->push(\GuzzleHttp\Middleware::mapRequest(function (RequestInterface $request) {
    if ('POST' !== $request->getMethod()) {
        // pass the request on through the middleware stack as-is
        return $request;
    }

    // add the form-params to all post requests.
    return new GuzzleHttp\Psr7\Request(
        $request->getMethod(),
        $request->getUri(),
        $request->getHeaders() + ['Content-Type' => 'application/x-www-form-urlencoded'],
        GuzzleHttp\Psr7\stream_for($request->getBody() . '&' . http_build_query($default_params_array)),
        $request->getProtocolVersion()
    );  
});

Upvotes: 3

Related Questions