Controllers
Naming Controllers
Controller classes should use PascalCase and end with "Controller". Each controller should represent a single resource or logical grouping of actions.
// Good
class UserController extends Controller
{
// methods
}
class InvoiceController extends Controller
{
// methods
}
// Bad
class user_controller extends Controller
{
// methods
}
class users extends Controller
{
// methods
}
Controller Actions
Controller methods should be public and use descriptive names. For RESTful controllers, use standard method names: index, show, store, update, destroy.
// Good
public function index()
{
// Return a list of users
}
public function show($id)
{
// Show a single user
}
public function store(Request $request)
{
// Create a new user
}
public function update(Request $request, $id)
{
// Update user
}
public function destroy($id)
{
// Delete user
}
// Bad
public function get_users()
{
// logic
}
public function save_user(Request $request)
{
// logic
}
Resource Controllers
Use Laravel's resource controllers to automatically map RESTful routes to controller actions. This improves consistency and reduces boilerplate code.
// Good
Route::resource('users', UserController::class);
// This creates routes for index, create, store, show, edit, update, destroy
// Bad
Route::get('users', [UserController::class, 'index']);
Route::post('users', [UserController::class, 'store']); // other routes
Best Practices
- Keep controllers thin: move business logic to service classes, action class or models.
- Validate requests using Form Request classes, not directly in controllers.
- Use dependency injection for services and repositories.
- Return appropriate HTTP responses (JSON for APIs, views for web).
- Document controller methods with PHPDoc comments.
Example: RESTful Controller
/**
* Handles user management actions.
*/
class UserController extends Controller
{
/**
* Display a listing of users.
*/
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
/**
* Store a newly created user.
*/
public function store(StoreUserRequest $request)
{
$user = User::create($request->validated());
return redirect()->route('users.index')->with('success', 'User created!');
}
// ...other RESTful methods...
}