ongoing/saferpay-bundle
A PHP bundle that integrates the Saferpay payment gateway (SIX Payment Services) into your application. It provides a service layer for payment initialization, authorization, capture, and cancellation, with configuration for merchant credentials, transaction handling, and common payment workflows.
v2.0.0 is a compatibility release, not a feature release: it moves the package onto Symfony 5.4 (the final 5.x LTS). Practically, that means the package's composer.json constraints on symfony/* were widened or re-pinned to ^5.4, and the major version bump signals that Symfony 4.x is no longer supported. Treat the upgrade as a constraint migration first and a code migration second.
Where to look, in order:
composer.json of the package — diff the require block between v1 and v2. The symfony/* pins and any illuminate/* or php bump are the real release notes; the changelog line is a summary.CHANGELOG.md and UPGRADE.md — the release note as published is one sentence, so confirm whether anything beyond constraints changed (removed classes, changed method signatures, dropped container tags).src/*ServiceProvider.php) — check whether bindings, singletons, or tagged collections were added, renamed, or removed.config/ — if a config file is publishable, re-publish and diff rather than overwrite.Minimal upgrade sequence in a consuming Laravel app:
composer why-not vendor/package ^2.0 # see what is holding you back
composer update vendor/package --with-all-dependencies -W
php artisan vendor:publish --provider="Vendor\Package\ServiceProvider" --tag=config --force
php artisan config:clear && php artisan cache:clear
php artisan test
First real use case: pick the single hot path that touches the package (a console command, an HTTP client call, a formatter) and verify it end-to-end on Symfony 5.4 before rolling the upgrade across the app. The most common failure mode here is not the package's own code — it's a transitive Symfony component resolving to a version the package no longer tolerates.
Pin the pair, not the package. Laravel and this package share the Symfony constraint graph. Upgrade Laravel and the package in the same PR, then run composer update --with-all-dependencies. Splitting them across two deploys produces resolver conflicts that are hard to attribute.
Depend on the package's contracts, not on Symfony's classes. If your application code type-hints Symfony\Component\... classes directly because the package happened to expose them, a future Symfony 6 bump becomes your problem. Wrap the package behind your own interface or a thin adapter class, and let the container bind it:
$this->app->bind(MyWrapper::class, fn ($app) => new MyWrapper($app->make(Vendor\Package\Client::class)));
Test against the constraint floor and ceiling. Add a CI matrix job at --prefer-lowest alongside the default resolution. Symfony 5.4 compatibility bugs almost always surface on the lowest allowed patch version, never on the latest.
Use the package's test doubles where offered. If the release added Symfony 5.4-era fakes (clock, HTTP client, process), prefer them over hand-rolled mocks — they track signature changes for you across future bumps.
If you maintain a downstream package, widen rather than bump: "vendor/package": "^1.0 || ^2.0" where the API is unchanged, and gate any behavior difference behind a runtime check rather than a hard version switch.
-W flag is not optional. composer update vendor/package alone will frequently leave a transitive symfony/console or psr/container at an incompatible version. --with-all-dependencies is the difference between a clean resolve and an hour of debugging.psr/container 1.x vs 2.x is the classic collision on this upgrade path. If a third-party package pins ^1.0, you cannot reach the Symfony 5.4 line until that dependency moves. Check with composer depends psr/container.symfony/deprecation-contracts logging (SYMFONY_DEPRECATIONS_HELPER=weak in dev) and actually read the output — that list is your Symfony 6 upgrade ticket.config:cache will mask config changes. After re-publishing config, always php artisan config:clear. A stale cached config is the most common "the upgrade broke my settings" false alarm.php constraint against every environment, including CI images and the production runtime — this bites late and hard.composer why-not vendor/package 2.0.0 (which package blocks the target) and composer prohibits symfony/console 5.4.*. Reading the solver's complaint directly is faster than guessing at constraints.macroable traits usually survive a compatibility bump untouched, but anything bound as a singleton with a Symfony type in its constructor may need rebinding if the signature shifted. Grep your AppServiceProvider for the package namespace after upgrading.How can I help you explore Laravel packages today?