Controllers 将相关的请求处理逻辑组织到类中。与其将所有逻辑放在路由闭包中,控制器将应用程序的操作(例如所有用户相关的操作)组织到方法中——保持路由清洁和代码的组织性。
基本控制器
php
{
{
::();
}
{
;
}
{
= ->([ => , => ]);
::();
}
}
用 Artisan 生成:php artisan make:controller UserController。每个方法处理一个操作,路由指向它们。
// generate a controller with all 7 RESTful methods stubbed
// php artisan make:controller PostController --resource
Route::resource('posts', PostController::class); // maps routes to the methods:
// index() create() store() show() edit() update() destroy()
资源控制器 具有标准的 CRUD 方法,配合 Route::resource 用于常规 RESTful 路由——对于典型的 CRUD 资源只需最少的样板代码。
class OrderController extends Controller {
// type-hinted dependencies are AUTO-INJECTED by Laravel's service container
public function __construct(private OrderService $orders) {}
public function store(Request $request, Mailer $mailer) { // method injection too
// $request and $mailer are resolved & injected automatically
}
}
Laravel 的服务容器自动注入类型提示的依赖到控制器构造函数和方法中(包括 Request)——代码清洁且可测试。
✓ Controllers should handle HTTP concerns (validate input, call services, return responses)
✗ Business logic belongs in SERVICES/models, not bloated controllers ("thin controllers")
控制器是 Laravel 的核心构建块——它们将请求处理逻辑组织到内聚的类中,这对于任何超出简单路由的应用程序都是必要的。
理解如何创建控制器、将路由映射到其方法,特别是使用 资源控制器 和 Route::resource(用于常规 RESTful CRUD,只需最少样板)对构建 Laravel 应用程序来说是日常知识。
Laravel 的一个关键特性是通过服务容器自动依赖注入到控制器中——类型提示的依赖(服务、请求、邮件发送器)会自动解析并注入,使代码清洁、可测试且松散耦合。
同样重要的最佳实践是保持控制器简洁——仅处理 HTTP 关注(验证、调用服务、返回响应),将业务逻辑委托给服务/模型,这样可以保持代码的可维护性和可测试性。
控制器与路由和模型一起构成了 Laravel 请求处理的骨架,使它们成为构建组织良好、专业化 Laravel 应用程序的基础。