Requirements | Installation | Usage | Plugins | Events | Features | Suggestions | Contributing | License
This bundle integrates Guzzle 6.x into Symfony. Guzzle is a PHP framework for building RESTful web service clients.
GuzzleBundle follows semantic versioning. Read more on semver.org.
- PHP 7.1 or above
- Symfony 4.0 or above
- Guzzle PHP Framework (included by composer)
To install this bundle, run the command below and you will get the latest version by Packagist.
composer require eightpoints/guzzle-bundle
To use the newest (maybe unstable) version please add following into your composer.json:
{
"require": {
"eightpoints/guzzle-bundle": "dev-master"
}
}
Note: we created Symfony Flex Recipe to speed up the installation of package.
eight_points_guzzle:
# (de)activate logging/profiler; default: %kernel.debug%
logging: true
# configure when a response is considered to be slow (in ms); default 0 (disabled)
slow_response_time: 1000
clients:
api_payment:
base_url: "http://api.domain.tld"
# NOTE: This option makes Guzzle Client as lazy (https://symfony.com/doc/master/service_container/lazy_services.html)
lazy: true # Default `false`
# Handler class to be used for the client
handler: 'GuzzleHttp\Handler\MockHandler'
# guzzle client options (full description here: https://guzzle.readthedocs.org/en/latest/request-options.html)
# NOTE: "headers" option is not accepted here as it is provided as described above.
options:
auth:
- acme # login
- pa55w0rd # password
headers:
Accept: "application/json"
# Find proper php const, for example CURLOPT_SSLVERSION, remove CURLOPT_ and transform to lower case.
# List of curl options: http://php.net/manual/en/function.curl-setopt.php
curl:
sslversion: 1 # or !php/const:CURL_HTTP_VERSION_1_0 for symfony >= 3.2
timeout: 30
# plugin settings
plugin: ~
api_crm:
base_url: "http://api.crm.tld"
options:
headers:
Accept: "application/json"
...
Open Configuration Reference page to see the complete list of allowed options.
bin/console assets:install
Using services in controller (eight_points_guzzle.client.api_crm represents the client name of the yaml config and is an instance of GuzzleHttp\Client):
/** @var \GuzzleHttp\Client $client */
$client = $this->get('eight_points_guzzle.client.api_crm');
$response = $client->get('/users');
This bundle allows to register and integrate plugins to extend functionality of guzzle and this bundle.
Find next lines in src/Kernel.php
:
foreach ($contents as $class => $envs) {
if (isset($envs['all']) || isset($envs[$this->environment])) {
yield new $class();
}
}
and replace them by:
foreach ($contents as $class => $envs) {
if (isset($envs['all']) || isset($envs[$this->environment])) {
if ($class === \EightPoints\Bundle\GuzzleBundle\EightPointsGuzzleBundle::class) {
yield new $class([
new \Gregurco\Bundle\GuzzleBundleOAuth2Plugin\GuzzleBundleOAuth2Plugin(),
]);
} else {
yield new $class();
}
}
}
- gregurco/GuzzleBundleWssePlugin
- gregurco/GuzzleBundleCachePlugin
- gregurco/GuzzleBundleOAuth2Plugin
- neirda24/GuzzleBundleHeaderForwardPlugin
- neirda24/GuzzleBundleHeaderDisableCachePlugin
- EugenGanshorn/GuzzleBundleRetryPlugin
Handling events. Events are dispatched before and after the request to the remote host.
<service id="listenerID" class="Your\ListenerClass\That\Implements\GuzzleEventListenerInterface">
<tag name="kernel.event_listener" event="eight_points_guzzle.pre_transaction" method="onPreTransaction" service="servicename"/>
</service>
Your event Listener, or Subscriber MUST implement GuzzleBundle\Events\GuzzleEventListenerInterface.
Events dispatched are eight_points_guzzle.pre_transaction, eight_points_guzzle.post_transaction.
The service on the tag, is so that if you have multiple REST endpoints you can define which service a particular listener is interested in.
Read more here.
All requests are logged into symfony default logger (@logger
service) with next format:
[{datetime}] eight_points_guzzle.{log_level}: {method} {uri} {code}
Example:
[2017-12-01 00:00:00] eight_points_guzzle.INFO: GET http://api.domain.tld 200
You can change message format by overriding eight_points_guzzle.symfony_log_formatter.pattern
parameter. See allowed variables here.
Adding aliases: If you want to use different names for provided services you can use aliases. This is a good idea if you don't want have any dependency to guzzle in your service name.
services:
crm.client:
alias: eight_points_guzzle.client.api_crm
Use Guzzle MockHandler in tests : If you want to mock api calls, you can force the clients to use the Guzzle MockHandler instead of the default one.
eight_points_guzzle:
clients:
api_payment:
base_url: "http://api.domain.tld"
handler: 'GuzzleHttp\Handler\MockHandler'
👍If you would like to contribute to the project, please read the CONTRIBUTING.md.
Join our Slack channel on Symfony Devs for discussions, questions and more: #8p-guzzlebundle.
🎉Thanks to the contributors who participated in this project.
- Configuration Reference
- Environment variables integration
- How to redefine class used for clients
- Disable throwing exceptions on HTTP errors (4xx and 5xx responses)
- Intercept request and response
- Autowiring Clients
- How to create a single-file plugin
This bundle is released under the MIT license