Install the package via Composer:
composer require vendor/package:^4.2
Verify PHP version compatibility (now requires PHP 8.1+) and Symfony components (e.g., symfony/console:^6.0). Check the upgrade guide for migration steps if coming from <4.2.0.
First use case: Run php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" to publish config files, then update your config/package.php to match the new schema (if applicable).
Vendor\Package\Contracts\ServiceInterface) via constructor injection:
public function __construct(private ServiceInterface $service) {}
app/Console/Commands and using the package’s traits (e.g., UsesPackageTraits):
use Vendor\Package\Console\Traits\UsesPackageTraits;
class CustomCommand extends Command {
use UsesPackageTraits;
// ...
}
Vendor\Package\Events\JobProcessed) in EventServiceProvider:
protected $listen = [
'Vendor\Package\Events\JobProcessed' => [
'App\Listeners\HandleJobEvent',
],
];
config('package.key') helper for runtime values. Override defaults via .env:
PACKAGE_DRIVER=database
Vendor\Package\Http\Middleware\Authenticate) to routes:
Route::middleware(['auth.package'])->group(function () {
// ...
});
php.ini or Docker/PHP-FPM config to use PHP 8.1+.composer update vendor/package --with-dependencies to pull compatible Symfony versions.UndefinedClass or RuntimeException errors related to removed Symfony components (e.g., Symfony\Component\Debug\Exception\FatalThrowableError).php.ini (error_reporting = E_ALL) to catch deprecated method calls (e.g., @deprecated in 4.2.0).\Log::channel('package')) for debug output. Configure in config/logging.php:
'channels' => [
'package' => [
'driver' => 'single',
'path' => storage_path('logs/package.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
],
Vendor\Package\Contracts\ServiceInterface to replace core services:
class CustomService implements ServiceInterface {
public function process(): void {
// Custom logic
}
}
Bind it in AppServiceProvider:
$this->app->bind(
ServiceInterface::class,
CustomService::class
);
AppServiceProvider:
Blade::directive('packageDirective', function () {
return "<?php echo Vendor\Package\Facades\Package::directive(); ?>";
});
Vendor\Package\Facades\Cache) for frequent operations:
$data = Cache::remember('package_key', 60, function () {
return $this->service->expensiveOperation();
});
Vendor\Package\Jobs\ProcessData). Configure in .env:
QUEUE_CONNECTION=database
.env keys with PACKAGE_ (e.g., PACKAGE_API_TOKEN) to avoid conflicts.PackageServiceProvider is registered in config/app.php after your custom providers if you’re overriding bindings.How can I help you explore Laravel packages today?