Installation:
composer require "sensio/buzz-bundle":"dev-master"
Add to AppKernel.php:
new Sensio\Bundle\BuzzBundle\SensioBuzzBundle(),
First Use Case:
Inject the buzz service into a controller or service:
use Buzz\Browser;
class MyController extends Controller
{
public function fetchDataAction()
{
$client = $this->get('buzz');
$response = $client->get('https://api.example.com/data');
return new Response($response->getContent());
}
}
Key Entry Points:
buzz service (default Buzz\Browser instance).config.yml (see below).Basic HTTP Requests:
$client = $this->container->get('buzz');
$response = $client->get('https://api.example.com');
$content = $response->getContent();
Custom Headers/Authentication:
$client = $this->container->get('buzz');
$client->setHeader('Authorization', 'Bearer token123');
$client->setHeader('Accept', 'application/json');
POST Requests with Data:
$client = $this->container->get('buzz');
$client->post('https://api.example.com/submit', [], [
'Content-Type' => 'application/json',
'data' => json_encode(['key' => 'value'])
]);
Handling Responses:
$response = $client->get('https://api.example.com');
if ($response->getStatusCode() === 200) {
$data = json_decode($response->getContent(), true);
}
Dependency Injection:
Bind the buzz service to a custom client class for reusable logic:
# app/config/services.yml
services:
my.custom.client:
class: AppBundle\Service\CustomBuzzClient
arguments: ['@buzz']
Configuration:
Override default Buzz\Browser settings in config.yml:
sensio_buzz:
client:
timeout: 30
user_agent: 'MyApp/1.0'
Middleware/Plugins:
Extend Buzz\Browser with custom plugins (e.g., logging, retries):
$client = $this->container->get('buzz');
$client->getEventDispatcher()->addListener('request', function ($event) {
// Pre-request logic
});
Symfony HTTP Client Alternative:
For modern Laravel (Symfony 5+), prefer symfony/http-client or guzzlehttp/guzzle over Buzz, as this bundle is archived and lacks active maintenance.
Archived Status:
symfony/http-client or guzzlehttp/guzzle.Deprecated Buzz Features:
setHeader vs. addHeader).Configuration Overrides:
config.yml settings may not persist across requests if the service is stateless. Reconfigure the client instance directly if needed:
$client = $this->container->get('buzz');
$client->setTimeout(30); // Override per-request
Response Inspection: Dump raw responses for debugging:
$response = $client->get('https://api.example.com');
var_dump($response->getStatusCode(), $response->getHeaders(), $response->getContent());
Error Handling:
Catch Buzz\Exception\NetworkException for network issues:
try {
$response = $client->get('https://api.example.com');
} catch (\Buzz\Exception\NetworkException $e) {
// Handle timeout/connection errors
}
Logging: Use Symfony’s logger to track requests:
$this->get('logger')->info('API Request', [
'url' => 'https://api.example.com',
'status' => $response->getStatusCode(),
]);
Custom Client Class:
Extend Buzz\Browser for reusable logic:
class ApiClient extends \Buzz\Browser
{
public function __construct()
{
$this->setHeader('Authorization', 'Bearer ' . $this->getAuthToken());
}
private function getAuthToken() { /* ... */ }
}
Register as a service:
services:
api.client:
class: AppBundle\Service\ApiClient
Event Listeners:
Hook into Buzz events (e.g., request, response) via Symfony’s event dispatcher:
$dispatcher = $client->getEventDispatcher();
$dispatcher->addListener('request', function ($event) {
$event->getRequest()->setHeader('X-Custom-Header', 'value');
});
Proxy Support:
Configure proxy settings via config.yml:
sensio_buzz:
client:
proxy: 'http://proxy.example.com:8080'
How can I help you explore Laravel packages today?