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');
}
}
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.
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.
You can install the package via composer:
composer require spatie/laravel-interacts-with-payload
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');
}
}
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');
}
}
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
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 👍
The MIT License (MIT). Please see License File for more information.