This is a Symfony bundle that integrates Guzzle for easier use.
You can use Composer to install the extension to your project:
composer require caciobanu/guzzle-bundle
Then create a minimal config file caciobanu_guzzle.yml
in config/packages/
:
caciobanu_guzzle:
clients:
google:
base_uri: 'https://google.com'
A complete configuration looks like:
caciobanu_guzzle:
clients:
google:
client_class: 'Your\Client' # You must extend 'GuzzleHttp\Client' which is the default value.
base_uri: 'https://google.com'
logging: true # Enable logging. Default value: false.
options: # See http://docs.guzzlephp.org/en/stable/request-options.html for all available options.
timeout: 30
headers:
'User-Agent': 'Test Agent'
Using services in controller:
/** @var \GuzzleHttp\Client $client */
$client = $this->get('caciobanu_guzzle.client.google');
$response = $client->get('/');
Adding a Guzzle middleware is a two step process:
- Create a new class:
<?php
namespace App\Guzzle\Middleware;
use Caciobanu\Symfony\GuzzleBundle\Middleware\BeforeRequestMiddlewareInterface;
use Psr\Http\Message\RequestInterface;
class MyMiddleware implements BeforeRequestMiddlewareInterface
{
public function __invoke(RequestInterface $request): RequestInterface
{
// Do something with the request
return $request;
}
}
- Create a Symfony service like so:
# config/services.yaml
services:
App\Guzzle\Middleware\MyMiddleware:
tags:
- { name: 'caciobanu_guzzle.middleware', client: 'google' }
There are three middleware interfaces that can be implemented:
- Caciobanu\Symfony\GuzzleBundle\Middleware\BeforeRequestMiddlewareInterface - marks middleware to be called before sending the request
- Caciobanu\Symfony\GuzzleBundle\Middleware\AfterResponseMiddlewareInterface - marks middleware to be called after the response is received
- Caciobanu\Symfony\GuzzleBundle\Middleware\OnErrorMiddlewareInterface - marks middleware to be called when an errors occurs
- Caciobanu\Symfony\GuzzleBundle\Middleware\RetryMiddlewareInterface - offers the possibility to retry requests
This library is developed by Catalin Ciobanu.