puli/symfony-bridge
Puli Symfony Bridge integrates Puli resource management with Symfony, providing a bundle, dependency-injection configuration, and services to resolve Puli resource and path references consistently across Symfony applications and packages.
This is the first assessment for the package, based on the 1.0.0-beta4 release. The headline change is Symfony 3.0 compatibility, which is the detail that decides whether you can use it on a modern Laravel app at all.
Start with composer.json, not the README:
require for symfony/* constraints. If they read ^3.0 (or ^2.8 || ^3.0), you are pinned to Laravel 5.4+ (Symfony 3.2/3.4) or, in the || case, Laravel 5.1+ only if the 2.x branch is genuinely still satisfied.minimum-stability and any prefer-stable. A beta tag will not install under Composer's default stable stability, so you need an explicit constraint.conflict/replace blocks — this is where the real support envelope usually hides.Install with an exact pin while it is still beta:
composer require vendor/package:1.0.0-beta4 --with-all-dependencies
(or add "vendor/package": "1.0.0-beta4" plus "minimum-stability": "beta", "prefer-stable": true to composer.json).
First use case to validate: register the service provider, publish the config (php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider"), and exercise the single primary entry point against your real Laravel version. If that request 500s, run composer why-not vendor/package 1.0.0-beta4 before touching any code — nine times out of ten it is a Symfony component version clash, not a bug in the package.
Pin the beta, do not float it. Betas in the 1.0.0 line can carry BC breaks between beta3 and beta4 with no semver protection. Use an exact version in composer.json and commit the lock file. Reserve range constraints (^1.0@beta) for after 1.0.0 stable lands.
Treat the Symfony 3.0 bump as your support matrix. Map it out explicitly:
| Your Laravel | Symfony components | Expected result on beta4 |
|---|---|---|
| 5.0 / 5.1 | 2.7 / 2.8 | Likely incompatible — the reason beta4 exists is the 3.x move |
| 5.2 / 5.3 | 2.7 / 3.0 | Test it; mixed, depends on whether `^2.8 |
| 5.4+ | 3.2 / 3.4 | Target platform for this release |
If you maintain multiple apps, keep the old tag on the pre-5.4 ones rather than trying to force one version across the estate.
Wrap it behind your own binding. In AppServiceProvider, $this->app->bind(YourInterface::class, PackageAdapter::class) and keep package classes out of your controllers, jobs, and events. A beta package is exactly the thing you want to be able to swap, and this also isolates you from the next Symfony-driven signature change.
Publish and own the config. Copy the package config into config/ and edit there rather than relying on package defaults; beta defaults have a habit of changing. Register the facade alias only if you actually use the facade syntax.
Test against the framework, not just the package. Use orchestra/testbench with a version matching each Laravel release you support, and add a CI matrix cell per Laravel version. This is the only reliable way to catch a Symfony 3.0 regression before production — the change is in a transitive dependency, so nothing in the package's own test suite would necessarily fail for you.
Queue and serialisation check. Any object the package hands you that ends up inside a queued job must serialise cleanly. Symfony 3.0 changed several internals; run one real dispatch() through a queue worker with QUEUE_DRIVER=database before trusting it in async paths.
--with-all-dependencies is often necessary to let Composer move a Symfony component up to satisfy beta4. If composer update appears to ignore the new tag entirely, your root minimum-stability is the culprit, not the package.composer why-not vendor/package 1.0.0-beta4 is the fastest diagnostic for a blocked upgrade. Look for a second package in your tree pinning an old symfony/* constraint — that will keep you on beta3 and you may not notice.TypeError or "declaration must be compatible" fatal in storage/logs/laravel.log after the upgrade almost always means your subclass or decorator still matches the 2.x signature. Search your codebase for extends on package namespaces first.composer update in production for a beta. Deploy the lock file. composer install --no-dev -o only.composer validate --strict and composer outdated --direct so a future Laravel/Symfony bump is visible as a failing build rather than a surprise during an unrelated feature branch.bind/singleton calls) are usually the sanctioned way to swap an implementation; config keys are the sanctioned way to change behaviour. Anything you reach for beyond those two is a beta-specific hack that will need revisiting at 1.0.0 stable.composer why-not → run full test suite on the oldest Laravel version you support → grep for extends into package namespaces → exercise the async path → only then ship.How can I help you explore Laravel packages today?