Une façon différente d’organiser son application avec Laravel Actions


Le paquet laravel-actions permet de mettre en place une façon différente d'organiser la logique de vos applications Laravel en se concentrant sur les actions que vos applications fournissent.
Au lieu de créer des controllers, des jobs, des listeners, etc …, il vous offre la possibilité de créer une classe PHP qui gère une tâche spécifique et d'exécuter cette classe comme vous le souhaitez.
Installation
Comme pour tout paquet une simple commande composer
fait l'installation :
1composer require lorisleiva/laravel-actions
Vous pouvez ensuite ajouter le trait AsAction à n'importe laquelle de vos classes pour en faire une action.
1use Lorisleiva\Actions\Concerns\AsAction; 2 3class UpdateUserPassword 4{ 5 use AsAction; 6 7 public function handle(User $user, string $newPassword) 8 { 9 // ...10 }11}
Usage
De manière similaire à toute autre commande make de Laravel pour créer votre première action utilisez :
1php artisan make:action PublishANewArticle
Ensuite, définissez les méthodes asX lorsque vous souhaitez que votre action soit exécutée en tant que X. Par exemple, asController, asJob, asListener et/ou asCommand.
1class PublishANewArticle 2{ 3 use AsAction; 4 5 public function handle(User $author, string $title, string $body): Article 6 { 7 return $author->articles()->create([ 8 'title' => $title, 9 'body' => $body,10 ]);11 }12 13 public function asController(Request $request): ArticleResource14 {15 $article = $this->handle(16 $request->user(),17 $request->get('title'),18 $request->get('body'),19 );20 21 return new ArticleResource($article);22 }23 24 public function asListener(NewProductReleased $event): void25 {26 $this->handle(27 $event->product->manager,28 $event->product->name . ' Released!',29 $event->product->description,30 );31 }32}
As an object
Vous pouvez maintenant exécuter votre action en tant qu'objet en utilisant la méthode run
comme suit :
1PublishANewArticle::run($author, 'My title', 'My content');
As a controller
Il suffit d'enregistrer votre action en tant que contrôleur invokable dans un fichier de routes.
1Route::post('articles', PublishANewArticle::class)->middleware('auth');
As a listener
Il y a juste à créer votre action en tant que listener de l'event NewProductReleased
.
1Event::listen(NewProductReleased::class, PublishANewArticle::class);
Ensuite, la méthode asListener
de votre action sera appelée chaque fois que l’event NewProductReleased
sera déclenché.
1event(new NewProductReleased($manager, 'Product title', 'Product description'));
Pour aller plus loin
En plus d'exécuter vos actions en tant qu'objets, contrôleurs et listeners, Laravel Actions supporte également les jobs, les commandes et même le mocking de vos actions dans les tests.
Vous pouvez retrouver toutes les informations de ce paquet sur son dépôt Github.
A lire
Autres articles de la même catégorie

Valider des numéros de téléphone avec Laravel
Simplifier la validation des numéros de téléphone grâce au package laravel-phone

Rémy Guillermic

Traiter du Markdown avec league/commonmark
Découvrons ensemble comment ce paquet nous fait gagner beaucoup de temps lors de l’écriture de nos articles !

William Suppo

Tester les performances avec phpbench
Surveillez les performances de votre code grâce aux tests de benchmark !

Mathieu De Gracia