czim/laravel-service
czim/laravel-service adds a lightweight service layer to Laravel applications. Its abstract service classes wrap models and repositories, helping keep controllers thin while making business logic organized, reusable, and easier to test.
3.1.0 is a compatibility release: it adds Laravel 10 and 11 support and does not advertise new APIs. That shapes how you should approach it — the work is mostly installation and verification, not learning a feature set.
UPGRADE.md / CHANGELOG.md entry for 3.x, and the package's composer.json. The illuminate/* / laravel/framework constraints plus the php constraint are the only things 3.1.0 definitively changes, so check them before anything else.composer require <vendor>/<package>:^3.1. If resolution fails, run composer why-not laravel/framework 11.* to identify which package is pinning you back — very often it is not this package but a sibling dependency.extra.laravel.providers. If the README asks you to add a provider or alias to config/app.php, remember Laravel 11 removed that file — the correct location is bootstrap/providers.php.php artisan vendor:publish --provider="Vendor\Package\ServiceProvider" (or --tag=...), then diff the published config against the package's source default so you can see what you are overriding.$this->app->bind(YourContract::class, fn ($app) => /* package-backed adapter */) in a service provider keeps the package swappable and gives you a seam to fake in tests.App\Support\... class. When 3.2 or 4.0 lands, you change one file instead of grepping the codebase..env, and make sure your deploy script runs php artisan config:cache — a package reading config() at boot time behaves differently once config is cached, so test that path explicitly.vendor/bin/phpunit (or Pest) inside the package after install to confirm the environment is genuinely supported, not just resolvable.^3.1. Avoid dev-main on a package whose only release signal is framework support; you want reproducibility, not the newest commit.composer.json and any provider/config changes before deploying to production.config/app.php, config/broadcasting.php, config/sanctum.php, and others) and moved middleware and exception handling into bootstrap/app.php. A package that reads config keys without defaults, or registers middleware in an old-style HTTP kernel, can behave differently on 11 even though it "supports" it. Grep the package for config('...') calls without a second default argument.composer show php and your Docker base image before debugging package behaviour that was never going to work.php artisan about (confirm framework/PHP/cache driver) → composer show <vendor>/<package> (confirm 3.1.0 actually installed) → php artisan config:clear → php artisan package:discover if the provider is missing. Nine times out of ten it is a stale config or bootstrap cache, not the package.bootstrap/providers.php to control ordering.bootstrap/cache/packages.php and services.php — Laravel caches discovery results and a half-finished composer require leaves them stale.Macroable trait or driver/manager pattern. Prefer extending via those over subclassing concrete classes. If none are documented, treat the package as a black box and put the adapter wrapper in front of it.How can I help you explore Laravel packages today?