# Actions as jobs
# How are attributes filled?
Similarly to actions as objects, attributes are filled manually when you dispatch the action.
PublishANewArticle::dispatch([
    'title' => 'My blog post',
    'body' => 'Lorem ipsum.',
]);
If you have defined a getAttributesFromConstructor method or property, this will also be applicable to jobs. For example:
// If you have the following constructor mapping.
class PublishANewArticle extends Action
{
    protected $getAttributesFromConstructor = ['title', 'body'];
}
// Then you can dispatch the action as a job like this.
PublishANewArticle::dispatch('My blog post', 'Lorem ipsum.');
# Queueable actions
Just like jobs, actions can be queued by implementing the ShouldQueue interface.
use Illuminate\Contracts\Queue\ShouldQueue;
class PublishANewArticle extends Action implements ShouldQueue
{
    // ...
}
Note that you can also use the dispatchNow method to force a queueable action to be executed immediately.
# Accessing the returned value
When dispatching a job immediately (either by using dispatchNow or the sync queue driver), then the result of the action will be returned.
$article = PublishANewArticle::dispatchNow([
    'title' => 'My blog post',
    'body' => 'Lorem ipsum.',
]);
# Registering middleware
You can register job middleware using the middleware method.
public function middleware()
{
    return [new RateLimited];
}