Organize Laravel Applications With Actions
Published on by Paul Redmond
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.:
namespace App\Authentication\Actions; use Lorisleiva\Actions\Concerns\AsAction; class UpdateUserPassword{ use AsAction; public function handle(User $user, string $newPassword) { $user->password = Hash::make($newPassword); $user->save(); }}
And here are the various ways you can run this class:
// Equivalent to "app(UpdateUserPassword::class)".UpdateUserPassword::make(); // Equivalent to "UpdateUserPassword::make()->handle($user, 'secret')".UpdateUserPassword::run($user, 'secret'); // As a controller defined in routesRoute::put( 'auth/password', UpdateUserPassword::class)->middleware('auth');
You can even define controller validation within the UpdateUserPassword
action:
public function rules(){ return [ 'current_password' => ['required'], 'password' => ['required', 'confirmed'], ];}
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.