Command
src/Http/Controllers directory.
Parameters
The name of the controller classExamples:
UserControllerAdmin/PostControllerApi/V1/CommentController
Options
The name of the module where the controller should be createdExample:
--module=blogGenerate an API controller (excludes
create and edit methods)Generate a single action controller with an
__invoke methodGenerate a resource controller for the given model
Generate a resource controller with CRUD methods
Generate form request classes for store and update methods (use with
--resource)Generate a singleton resource controller
Generate an accompanying test for the controller
Generate an accompanying Pest test
Examples
Basic Controller
app-modules/user-management/src/Http/Controllers/UserController.php
Resource Controller
API Resource Controller
create and edit methods:
app-modules/blog/src/Http/Controllers/Api/PostController.php
Controller with Model Binding
The
--model option automatically resolves the model namespace to your module when the model exists in the module.Controller with Form Requests
- A resource controller with form request type hints
StorePostRequestclassUpdatePostRequestclass
Invokable Controller
Nested Controllers
app-modules/blog/src/Http/Controllers/Admin/PostController.php
Namespace: Modules\Blog\Http\Controllers\Admin
Module-Specific Behavior
When using the--module option with --model, the controller generator:
- Parses model namespaces to ensure they reference module models
- Validates model names to prevent invalid characters
- Auto-prefixes namespaces if you provide a simple model name
Usage with Routes
After creating a controller, register routes in your module’s route file:app-modules/blog/routes/blog-routes.php
Best Practices
Organize by responsibility
Organize by responsibility
Group related controllers in subdirectories:
Admin/PostController- Admin functionalityApi/V1/PostController- API endpointsGuest/PostController- Public-facing controllers
Use form requests
Use form requests
Always use
--requests with resource controllers to separate validation logic:Choose API or web
Choose API or web
Use
--api for API endpoints (no create/edit views) and regular --resource for web routes with views.Consider invokable controllers
Consider invokable controllers
For single-action controllers, use
--invokable to keep code focused and routes cleaner.See Also
make:request --module=- Generate form request classes (see Make Commands Overview)- make:model - Generate model classes
- Laravel Controller Documentation