spatie/laravel-interacts-with-payload

Add variables to the payloads of all jobs in a Laravel app

1.2.0 2024-03-08 13:11 UTC

This package is auto-updated.

Last update: 2024-04-08 13:20:16 UTC


README

Latest Version on Packagist run-tests Total Downloads

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

68747470733a2f2f6769746875622d6164732e73332e65752d63656e7472616c2d312e616d617a6f6e6177732e636f6d2f6c61726176656c2d696e746572616374732d776974682d7061796c6f61642e6a70673f743d31

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.