mopa/composer-bridge
Bridge to run and access Composer classes via composer.phar (system or project-local). Provides a ready-to-use Composer instance for querying installed packages and performing Composer-related tasks, integrating with Symfony Console input/output.
Installation:
composer require mopa/composer-bridge
Add to your composer.json under extra:
"bridge": {
"symfony": {
"dir": "vendor/symfony"
}
}
First Use Case:
Use the bridge to load Symfony components without requiring the full Symfony framework. Ideal for Laravel projects needing Symfony’s HttpFoundation, Console, or DependencyInjection without bloat.
Example in config/app.php:
$loader = require __DIR__.'/../../vendor/autoload.php';
$bridge = new \Mopa\ComposerBridge\Bridge\Bridge($loader);
$bridge->register();
Now access Symfony classes directly:
use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();
Dependency Isolation:
Symfony\Component\Console only in app/Console/Kernel.php:
$bridge = new \Mopa\ComposerBridge\Bridge\Bridge(require __DIR__.'/../../../vendor/autoload.php');
$bridge->register();
use Symfony\Component\Console\Application;
Autoloading Optimization:
composer.json autoloading to avoid conflicts:
"autoload": {
"psr-4": {
"App\\": "app/",
"Symfony\\": "vendor/symfony" // Explicitly map Symfony namespaces
}
}
Service Container Integration:
register() in a service provider:
public function register()
{
$bridge = new \Mopa\ComposerBridge\Bridge\Bridge($this->app->get('loader'));
$bridge->register();
$this->app->singleton('symfony.event_dispatcher', function () {
return new \Symfony\Component\EventDispatcher\EventDispatcher();
});
}
HttpFoundation for request/response objects in middleware or controllers.Symfony\Component\Console for CLI tools without installing Symfony CLI.Symfony\Component\DependencyInjection for complex service wiring.Namespace Collisions:
Symfony\Component\* namespaces may conflict with Laravel’s or other packages. Solution: Use fully qualified namespaces (e.g., \Symfony\Component\HttpFoundation\Request) or alias them in composer.json:
"autoload": {
"psr-4": {
"Symfony\\": "vendor/mopa-bridge/symfony"
}
}
Bridge Registration Timing:
$bridge->register() early in the bootstrap process (e.g., in bootstrap/app.php).Symfony Version Mismatches:
composer.json:
"require": {
"symfony/http-foundation": "^5.4"
}
Class Not Found Errors:
composer dump-autoload
Symfony\Component\HttpFoundation\Request vs. Symfony\Component\HttpFoundation\Requests).Performance Overhead:
symfony/framework-bundle).Custom Bridge Config:
$bridge = new \Mopa\ComposerBridge\Bridge\Bridge($loader, [
'symfony' => [
'dir' => 'custom/vendor/symfony',
'aliases' => [
'Symfony\Component\HttpFoundation' => 'Symfony\HttpFoundation'
]
]
]);
Integration with Laravel Mix:
Filesystem component in build scripts:
use Symfony\Component\Filesystem\Filesystem;
$fs = new Filesystem();
$fs->dumpFile('public/mix-manifest.json', file_get_contents('public/mix-manifest.json'));
Testing:
MockApplication. Example:
$bridge->reset(); // If supported by your version
How can I help you explore Laravel packages today?