boson-php/symfony-http-bridge
Bridge package connecting Boson PHP with Symfony HttpFoundation, providing adapters to translate requests and responses between the two ecosystems for smoother interoperability when mixing Boson components with Symfony-based HTTP handling.
Installation
composer require boson-php/symfony-http-bridge
First Use Case: Converting Symfony Request/Response to Laravel
use Boson\SymfonyHttpBridge\SymfonyHttpBridge;
// Convert Laravel Request to Symfony Request
$symfonyRequest = SymfonyHttpBridge::toSymfonyRequest(request());
// Convert Symfony Response to Laravel Response
$laravelResponse = SymfonyHttpBridge::toLaravelResponse($symfonyResponse);
Where to Look First
SymfonyHttpBridge is the core class for conversions.// Example: Middleware to convert Symfony Request to Laravel
public function handle($request, Closure $next) {
$symfonyRequest = SymfonyHttpBridge::toSymfonyRequest($request);
// Process with Symfony logic...
$response = $next($symfonyRequest);
return SymfonyHttpBridge::toLaravelResponse($response);
}
Request/Response objects for testing Symfony-dependent logic.use Symfony\Component\HttpFoundation\Request;
use Boson\SymfonyHttpBridge\SymfonyHttpBridge;
$symfonyRequest = Request::create('/test', 'GET');
$laravelRequest = SymfonyHttpBridge::toLaravelRequest($symfonyRequest);
// Example: Validate using Symfony Validator
$validator = new SymfonyValidator();
$errors = $validator->validate($data, $constraints);
return SymfonyHttpBridge::toLaravelResponse(
new SymfonyResponse($errors)
);
// Old Symfony Controller
public function oldSymfonyAction(Request $request) { ... }
// New Laravel Controller
public function laravelAction() {
$symfonyRequest = SymfonyHttpBridge::toSymfonyRequest(request());
$response = $this->oldSymfonyAction($symfonyRequest);
return SymfonyHttpBridge::toLaravelResponse($response);
}
Leverage Symfony’s Features
Request/Response for advanced features like:
$request->files).$request->cookies, $request->getSession()).$request->getPreferredFormat()).Performance Considerations
$symfonyRequest = SymfonyHttpBridge::toSymfonyRequest(request());
// Reuse $symfonyRequest across multiple Symfony calls
Type Safety
array_unshift() or array_merge() carefully when converting arrays (e.g., $_SERVER or $_GET). The bridge may not handle all edge cases.Error Handling
try {
$symfonyResponse = SymfonyHttpBridge::toSymfonyResponse($laravelResponse);
} catch (\InvalidArgumentException $e) {
abort(500, 'Conversion failed: ' . $e->getMessage());
}
Incomplete Feature Support
Request/Response features (e.g., custom headers, non-standard attributes). Test thoroughly.Request/Response directly where needed.Bidirectional Conversion Issues
Route model binding, middleware parameters).Session Handling
getSession()) may not persist across conversions. Manually sync sessions if needed:$symfonyRequest->getSession()->set('key', $value);
$laravelRequest->session()->put('key', $value);
File Uploads
$_FILES) may not convert seamlessly. Use Symfony’s UploadedFile for complex cases:$symfonyFile = $symfonyRequest->files->get('file');
$laravelFile = SymfonyHttpBridge::toLaravelUploadedFile($symfonyFile);
Deprecation Warnings
boson-php/boson, which may have unmaintained dependencies. Check for compatibility with your Symfony version.Log Conversions
\Log::debug('Laravel Request:', request()->toArray());
\Log::debug('Symfony Request:', SymfonyHttpBridge::toSymfonyRequest(request())->toArray());
Compare Objects
dump() or dd() to compare Laravel and Symfony objects:dd(
request()->headers->all(),
SymfonyHttpBridge::toSymfonyRequest(request())->headers->all()
);
Check for Missing Data
$_SERVER, $_COOKIE) is present before conversion. Laravel’s Request may filter or normalize data differently.Custom Conversions
class CustomSymfonyHttpBridge extends SymfonyHttpBridge {
public static function toSymfonyRequest(Request $laravelRequest): Request {
$symfonyRequest = parent::toSymfonyRequest($laravelRequest);
// Add custom logic (e.g., set a header)
$symfonyRequest->headers->set('X-Custom-Header', 'value');
return $symfonyRequest;
}
}
Middleware for Automatic Conversion
public function handle($request, Closure $next) {
$symfonyRequest = SymfonyHttpBridge::toSymfonyRequest($request);
$response = $next($symfonyRequest);
return SymfonyHttpBridge::toLaravelResponse($response);
}
Service Provider Integration
$this->app->singleton('symfony.http.bridge', function () {
return new SymfonyHttpBridge();
});
Testing Utilities
function makeSymfonyRequest(array $data = []): Request {
return SymfonyHttpBridge::toSymfonyRequest(
Request::create('/test', 'GET', $data)
);
}
How can I help you explore Laravel packages today?