lorisleiva/laravel-actions
Unify your Laravel app logic into single-purpose “Action” classes that can run as controllers, jobs, listeners, or commands. Keep business logic in one place, reduce duplication, and generate actions via artisan with flexible asX entrypoints.
run() or mocked in unit tests.asController, asJob), reducing refactoring risk.FormRequest via validate() methods, maintaining existing validation workflows.Route::post('...', Action::class)).asListener methods.asController (though decorators handle this).asJob), which is negligible but could be a concern in high-frequency systems.run() (though backtrace limits are configurable).assertActionRunsWithoutErrors)?asJob works with queues).asController (returns resources).Phase 1: Pilot Phase
php artisan make:action-from-controller).Phase 2: Hybrid Integration
- Route::post('/articles', ArticleController::class);
+ Route::post('/articles', PublishArticle::class);
- Event::listen(NewProductEvent::class, ProductListener::class);
+ Event::listen(NewProductEvent::class, NotifyProductTeam::class);
Phase 3: Full Adoption
Publish{Resource}, Create{Entity}).handle()").FormRequest and Validator.actingAs, assertDatabaseHas).JobDecorator, ControllerDecorator, etc., for custom behavior.asX methods (e.g., asWebhook, asCron).asJob with transactions.asController methods.handle() logic in isolation.asController, asJob, etc., end-to-end.asX methods.handle() vs. asController).run()-invoked actions may require custom stack trace handling.asJob actions.asJob actions in queues).How can I help you explore Laravel packages today?