Installation Add the bundle via Composer:
composer require czogori/rentgen-bundle
Enable it in config/bundles.php:
return [
// ...
Czogori\RentgenBundle\RentgenBundle::class => ['all' => true],
];
Configuration Publish the default config:
php bin/console config:dump-reference RentgenBundle
Override settings in config/packages/rentgen.yaml:
rentgen:
api_key: 'your-api-key-here'
base_uri: 'https://api.rentgen.example.com'
First Use Case
Inject the RentgenClient service into a controller or command:
use Czogori\RentgenBundle\Client\RentgenClient;
class MyController extends AbstractController
{
public function __construct(private RentgenClient $rentgen)
{
}
public function index()
{
$response = $this->rentgen->get('/documents');
return $this->json($response);
}
}
API Integration Use the client for RESTful operations:
// GET request
$documents = $this->rentgen->get('/documents', ['query' => ['limit' => 10]]);
// POST request with payload
$this->rentgen->post('/documents', ['title' => 'Contract']);
Authentication Handle API keys or OAuth via config:
rentgen:
auth:
type: 'api_key'
api_key: '%env(RENTGEN_API_KEY)%'
Response Handling Normalize responses with custom decoders:
$this->rentgen->setDecoder(new CustomDecoder());
Event-Driven Extensions
Subscribe to rentgen.response events for middleware:
// src/EventListener/RentgenResponseListener.php
public function onResponse(ResponseEvent $event)
{
$event->setData($event->getData() + ['custom_field' => true]);
}
Dependency Injection
Bind custom clients in services.yaml:
services:
App\Service\CustomRentgenClient:
arguments:
$client: '@rentgen.client'
RentgenClient in PHPUnit:
$this->mockBuilder()
->getMockBuilder(RentgenClient::class)
->disableOriginalConstructor()
->onlyMethods(['get', 'post'])
->getMock();
API Key Exposure
%env() or a secrets manager.RentgenBundle config schema:
php bin/console debug:config rentgen
Rate Limiting
429 Too Many Requests:
$this->rentgen->setRetryStrategy(new ExponentialBackoff());
Response Parsing
Caching
CacheInterface with caution:
$this->rentgen->setCache($cachePool);
rentgen.yaml:
rentgen:
debug: true
HttpClient interceptor for debugging:
$this->rentgen->getHttpClient()->getEventDispatcher()->addListener(
'request',
function (RequestEvent $event) {
dump($event->getRequest());
}
);
Custom Clients
Extend AbstractRentgenClient for domain-specific logic:
class DocumentClient extends AbstractRentgenClient
{
public function uploadDocument(array $fileData): array
{
return $this->post('/documents/upload', $fileData);
}
}
Middleware
Add request/response middleware via Symfony’s HttpClient:
$this->rentgen->getHttpClient()->setDefaultOptions([
'auth_bearer' => $token,
'headers' => ['X-Custom-Header' => 'value'],
]);
Event Dispatcher
Listen for rentgen.request and rentgen.response events to modify payloads or log activity.
Configuration Overrides Dynamically override settings per environment:
# config/packages/rentgen_prod.yaml
rentgen:
base_uri: '%env(RENTGEN_PROD_URI)%'
How can I help you explore Laravel packages today?