xetaio/eloquence
A Laravel extension for Eloquent models that adds reusable behaviors such as searchable, sortable, and sluggable traits, making it easy to add query filtering, ordering, and slug generation without extra boilerplate.
composer.json constraints (illuminate/*: ^9.0, PHP ^8.0) against your app. On Laravel 9 you are also on Symfony 6 and PHP 8, so any transitive dependency pinned to older versions will surface here rather than at runtime.composer require vendor/package:^9.0, then open the package's composer.json and README to see what the service provider registers. The extra.laravel.providers / aliases block tells you whether discovery is automatic or you must register manually in config/app.php.php artisan vendor:publish --provider="Vendor\\Package\\PackageServiceProvider" (add --tag=config if tags are defined). Read the published config/{package}.php top to bottom — it is the fastest map of the package's capabilities and defaults.app(Vendor\Package\Client::class) or the facade) and confirm a round trip works before integrating it into jobs, listeners, or middleware.README, the published config file, the service provider (what it binds and singleton-registers), then the tests directory if shipped. The provider is the authoritative answer to "how is this instantiated and with what dependencies."new. Register the package's client/manager as a singleton in a small app-level service provider if it is not already bound that way. This keeps configuration injection consistent and makes it swappable in tests.App\Contracts\FooGateway) and an implementation that delegates to the package. Controllers, jobs, and listeners depend on the interface. This is the single highest-leverage pattern for third-party packages: it isolates you from the package's API surface, makes fakes trivial, and turns a future major upgrade into a one-file change.env() in the published config file and set them per environment in .env. Never edit the published config with hard-coded credentials; treat it as a template.config('foo.enabled')) so you can disable the package in local/CI without removing code, and so a failing dependency degrades gracefully in production.$tries, $backoff, and failed() handling. Do not call it inline in a request lifecycle.TestCase, $this->app->instance(FooGateway::class, new FakeFooGateway()) and assert against your interface. For integration tests, use RefreshDatabase and the package's own fakes if provided. Keep at least one test that exercises the real config resolution so a bad publish or env key is caught.^9.0, read the package's changelog/upgrade notes for anything beyond the Laravel 9 line item, and run your adapter's test suite as the gate — not the package's.composer.json for an illuminate/support floor; if it is ^9.0 only, you cannot run this on Laravel 8 apps and a monorepo with mixed versions will conflict.Declaration of ... must be compatible with ... errors, the culprit is usually a transitive dependency, not this package.doctrine/dbal behavior changes. If the package touches schema introspection or column modification, Laravel 9's dbal 3 upgrade changes return types (e.g. Doctrine\DBAL\Types\Type registry). Verify migrations and any package commands that inspect the schema.str_* / array_* global helpers in favor of Str:: / Arr::. If the package or your adapter uses them, expect deprecation noise in logs; silence it deliberately rather than by lowering the error level.migrate:fresh in CI does not collide with existing class names.php artisan config:clear (and route:clear if routes are registered). Stale cached config is the most common cause of "the package ignores my .env."extra.laravel.providers, you will get double registration. Pick one; run php artisan package:discover after changing dependencies.storage/logs/laravel.log for the bound class name, then php artisan tinker and app()->make(...) to confirm the container resolves it with the config you expect. dd(config('package')) inside a route is faster than reading source.register()/boot() and its published config are the intended extension seams. If you need behavior the package does not expose, decorate the bound class and re-bind in your own provider rather than forking — forking a package that is mid-major-version will cost you on the next bump.composer.lock for applications. A ^9.0 constraint on a freshly-released major means patch releases may land quickly; a lockfile keeps CI deterministic while you evaluate them.How can I help you explore Laravel packages today?