Organize Laravel Applications With Actions

Packages

January 14th, 2021

laravel-actions-2-0-featured.png

The Laravel actions package provides a new way to organize your Laravel applications’ logic by focusing on actions. Using this technique, you can execute the same class as a controller, a command, a job, and a listener.

In v2, the package no longer extends an Action class but instead uses traits to provide helper methods and detect which context to execute a class.

Here’s a simple example of an action class that we can use as a controller, an object, a job, a listener, etc.:

1namespace App\Authentication\Actions;
2 
3use Lorisleiva\Actions\Concerns\AsAction;
4 
5class UpdateUserPassword
6{
7 use AsAction;
8 
9 public function handle(User $user, string $newPassword)
10 {
11 $user->password = Hash::make($newPassword);
12 $user->save();
13 }
14}

And here are the various ways you can run this class:

1// Equivalent to "app(UpdateUserPassword::class)".
2UpdateUserPassword::make();
3 
4// Equivalent to "UpdateUserPassword::make()->handle($user, 'secret')".
5UpdateUserPassword::run($user, 'secret');
6 
7// As a controller defined in routes
8Route::put(
9 'auth/password',
10 UpdateUserPassword::class
11)->middleware('auth');

You can even define controller validation within the UpdateUserPassword action:

1public function rules()
2{
3 return [
4 'current_password' => ['required'],
5 'password' => ['required', 'confirmed'],
6 ];
7}

You can even run this class as a command. Check out the Basic usage documentation for details on defining actions capable of running as a command.

Learn More

Check out laravelactions.com for an overview, installation instructions, and the complete documentation for this package. You can check out the source code and contribute on GitHub at lorisleiva/laravel-actions.

We previously covered the 1.0 version of this package, but it’s been re-written from scratch and provides a slightly different paradigm. Check out the upgrade guide for complete details on what has changed in 2.0.

Filed in:

Paul Redmond

Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.