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
Prism, le SDK agentique pour Laravel
Derrière son utilisation simple et verbeuse, Prism cache une boite à outil très complète pour l'intégration de vos models IA dans vos applications Laravel
Antoine Benevaut
Se débarrasser des adresses jetables avec Laravel
Débarrassez votre application Laravel des mails jetables !
Ludovic Guénet 🐆
Artisan Benchmark
Découvrez artisan-benchmark, un package efficace pour mesurer le temps d'exécution, la mémoire consommée et les requêtes exécutées par vos commandes !
Mathieu De Gracia