Inject extra info to the payloads of all jobs in a Laravel app
This package makes it easy to inject things in every job.
Imagine that you want to have the user who initiated the queued of a job available in every queued job. This is how you would implement that using this package.
// typically in a service provider
use Spatie\InteractsWithPayload\Facades\AllJobs;
AllJobs::add('user', fn() => auth()->user());
To retrieve the user in your queued job you can call getFromPayload
which is available through the InteractsWithPayload
trait.
use Illuminate\Contracts\Queue\ShouldQueue;
use Spatie\InteractsWithPayload\Concerns\InteractsWithPayload;
class YourJob implements ShouldQueue
{
use InteractsWithPayload;
public function handle()
{
// instance of User model or `null`
$user = $this->getFromPayload('user');
}
}
Are you a visual learner?
In this livestream, you'll see our developer Freek explains how you can use the package, it's internals and how we test this package.
Support us
We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.
We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.
Installation
You can install the package via composer:
composer require spatie/laravel-interacts-with-payload
Usage
To add a value to all jobs call the add
method on the AllJobs
facade with a name and a closure that returns the value.
use Spatie\InteractsWithPayload\Facades\AllJobs;
AllJobs::add('extraValue', fn() => 'My extra value')
To retrieve the user in your queued job you can call getFromPayload
which is available through the InteractsWithPayload
trait.
use Illuminate\Contracts\Queue\ShouldQueue;
use Spatie\InteractsWithPayload\Concerns\InteractsWithPayload;
class YourJob implements ShouldQueue
{
use InteractsWithPayload;
public function handle()
{
// will contain "My extra value"
$value = $this->getFromPayload('extraValue');
}
}
Using models
It is safe to let the closure you pass to add
return an Eloquent model.
use Spatie\InteractsWithPayload\Facades\AllJobs;
AllJobs::add('user', fn() => auth()->user())
You can retrieve the model with getFromPayload
use Illuminate\Contracts\Queue\ShouldQueue;
use Spatie\InteractsWithPayload\Concerns\InteractsWithPayload;
class YourJob implements ShouldQueue
{
use InteractsWithPayload;
public function handle()
{
// instance of User model or `null` if the user has been deleted in the meantime
$user = $this->getFromPayload('user');
}
}
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
This package is inspired by this awesome blogpost by James Brooks. Thank you James for also having helped hunting down that queueing bug in Laravel
License
The MIT License (MIT). Please see License File for more information.