fabiencrassat/curriculumvitae
A Laravel/PHP package for building and managing a curriculum vitae from structured data. It helps organize CV sections and render a resume, making it easy to add a lightweight CV builder to your application or site. Composer-installable and suitable for Laravel or standalone PHP projects.
Start by confirming your runtime can actually take 2.0: "Symfony 4 compliance" is shorthand for a raised floor — PHP >= 7.1.3 and Symfony components pinned to ^4.0. Check composer why symfony/* before upgrading, because any transitive dependency still asking for ^2.8|^3.0 will block the install and Composer will report a conflict rather than silently downgrading.
composer require <vendor>/<package>:^2.0
php artisan vendor:publish --provider="<Vendor>\<Package>\ServiceProvider"
Where to look first:
composer.json — this is the source of truth for the supported Laravel/Symfony matrix in 2.0.register()/boot() methods — Symfony 4 dropped a lot of container-aware magic, so bindings that used to be resolved implicitly may now be explicit.config/<package>.php, since 2.0 config keys can shift without a migration path.First use case to validate end-to-end: resolve the package's main entry point from the container and exercise it once through a queued job or console command, not just a unit test. Symfony 4 compliance issues usually surface in bootstrapping (service providers, console kernel, event dispatcher wiring), which unit tests skip.
Pin the major and upgrade deliberately. The ^2.0 constraint plus a lockfile commit is the safest pattern; 2.0 is a breaking release by definition (major bump for a Symfony major bump), so treat every environment as a fresh integration.
Inject contracts, not concrete Symfony classes. Symfony 4 tightened several constructors and removed container-aware base classes. Type-hint against interfaces (EventDispatcherInterface, LoggerInterface) and let Laravel's container autowire them — this keeps you insulated from the next component bump.
Isolate the package behind a thin adapter. Wrap the package's public API in one of your own service classes and bind it in a service provider. When 3.0 lands and Symfony 5/6 semantics arrive, you change one file instead of grepping your codebase.
CI matrix by PHP version. With a 7.1.3 floor and Symfony 4's own upper bounds, run your pipeline against the oldest and newest PHP your composer.json allows. Symfony 4 deprecations are emitted at runtime as notices — fail the build on deprecations (SYMFONY_DEPRECATIONS_HELPER=strict in phpunit config) so they don't accumulate silently.
Console and queue integration. If the package registers commands, verify them under php artisan list after upgrading; Symfony 4 changed console command signatures and default naming, so commands that previously resolved by alias can disappear. For queued usage, confirm serialization works — Symfony 4 narrowed what its serializers accept.
Testing pattern. Use RefreshDatabase plus container swapping ($this->swap(...)) to substitute the package's Symfony-backed services with fakes. This is faster and more stable than mocking Symfony classes directly, whose constructors are now stricter.
GetSetMethodNormalizer, deprecated console helpers) is gone. If you extended a package class, check that your parent still exists and that method signatures still match.php artisan config:clear and php artisan cache:clear before debugging a "service not found" error after upgrading — stale cached providers produce misleading container exceptions.composer update vs composer require. Updating the package inline can leave orphaned Symfony 3 packages in the lockfile. Prefer removing and re-requiring, or run composer why-not symfony/framework-bundle 4.0 to find the blocker.@deprecated notice from 2.0 as a 3.0 breakage. Log them in CI and open issues now.defer-able in most cases — if you're not overriding its published config, mark it deferred in your own provider registration for a small boot-time win. Override bindings in register(), not boot(), to avoid resolution-order surprises.composer.json branch with ^1.0 pinned so you can hotfix production while 2.0 is validated.How can I help you explore Laravel packages today?