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
Laravel Orion
Une API à portée de clics
Mathieu De Gracia
Améliorer le référencement avec spatie/laravel-sitemap
Voyons ensemble comment créer un sitemap afin d'optimiser le référencement auprès des moteurs de recherche !
Antoine Benevaut
DTO est mort vive Data !
Prise en main du paquet spatie/laravel-data remplaçant de spatie/data-transfer-object
William Suppo