Symfony Bundle ยท PHP 8.2+ ยท Packagist
An integration engine for Symfony that centralizes your external APIs under clear contracts.
The Problem
Different formats, inconsistent auth, duplicated cache logic. Code fragments and every new API means starting from scratch.
Tokens and cache reimplemented in every integration.
Every HTTP client has its own structure.
HTTP coupled to domain. Impossible to isolate.
Every developer solves it their own way.
No traceability, no unified logs, no shared context.
How It Works
A single entry point. Each step has a clear responsibility.
OAuth, sessions, API keys. The engine resolves and caches them automatically.
/orders/{id} resolved at call time. Explicit failure if param is missing.
YAML โ auth โ call layer. Each layer overrides the previous. No magic.
Each action defines its own Response DTO with a guaranteed contract.
Client, cache and config source replaceable with one line in YAML.
make:integration generates Mapper, Response DTO and YAML in seconds.
The Call Site
No magic strings โ everything through contracts.
// No authentication $registry->get( AcmeIntegration::NAME )->send( GetUsersAction::getName() );
// With route params โ /users/{id} $registry->get( AcmeIntegration::NAME )->send( GetUserAction::getName(), context: DefaultActionContext::create(['id' => 42]) );
// With body and custom headers $registry->get( AcmeIntegration::NAME )->send( CreateOrderAction::getName(), body: $body, headers: new CorrelationHeaders($id) );
Layered Design
Three levels that emerge naturally. Use what you need.
| Class | Responsibility | Scope |
|---|---|---|
| CreateChargeAction | Only declares the method, path and response DTO. No HTTP logic. | Concrete action |
| StripeAction | Auth, base path and common Stripe headers. Reused by all its actions. | Integration |
| AbstractAction | Base contract provided by the engine. Extensible without touching the core. | Bundle |
The make:integration command creates the config, classes and YAML in one step.
Contact
Write to us and we'll get back to you as soon as possible.
No boilerplate. No arbitrary decisions. Just your business logic.