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::class11)->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.
0 comments:
Post a Comment
Thanks