什么是控制器
除了将所有请求处理逻辑作为闭包定义在路由文件中,你还可以使用「控制器」类来组织这些行为。 控制器可以把相关的请求处理逻辑集中到一个类里。 例如,UserController 类可以处理与用户相关的所有请求,包括展示、创建、更新与删除用户等。
默认情况下,控制器存放在 app/Http/Controllers 目录下。
创建控制器
要快速生成新的控制器,请使用make:controller Artisan 命令。
默认情况下,应用中所有的控制器都会存放在 app/Http/Controllers 目录下。
基础控制器
控制器类可以拥有若干响应 HTTP 请求的 public 方法。App\Http\Controllers\UserController 类的 show 方法会被调用,并将路由参数传给该方法。
控制器不必继承任何基类。不过,若所有控制器都需要共享的方法,你可以让它们继承一个基础控制器类,这有时会很有用。
单动作控制器
如果控制器动作特别复杂,将整个控制器类专门用于这一个动作会更方便。 只需在控制器中定义单一的__invoke 方法。
make:controller Artisan 命令的 --invokable 选项生成可调用控制器。
资源控制器
如果把应用中的每个 Eloquent 模型都看作「资源」,那么通常会对每种资源进行同一组操作(CRUD)。 Laravel 的资源路由允许你用一行代码将典型的增删改查(CRUD)路由分配给控制器。 使用make:controller Artisan 命令的 --resource 选项,可以快速创建处理这些动作的控制器。
app/Http/Controllers/PhotoController.php 中生成控制器。
控制器会包含针对各类资源操作的方法桩。
接着,注册指向该控制器的资源路由。
运行
php artisan route:list 可以快速查看应用中所有路由的概览。部分资源路由
在声明资源路由时,可以指定控制器要处理的动作子集。API 资源路由
在为 API 声明资源路由时,通常会想排除create、edit 这类展示 HTML 模板的路由。
使用 apiResource 方法可以自动排除这两个路由。
中间件属性
也可以通过 PHP 属性为控制器分配中间件。依赖注入
构造器注入
Laravel 的服务容器会用于解析所有 Laravel 控制器的依赖。 因此,你可以在控制器构造器中通过类型提示声明它所需的依赖。 声明的依赖会被自动解析并注入到控制器实例中。方法注入
除了构造器注入外,你也可以在控制器方法上通过类型提示声明依赖。 方法注入常见的用途是将Illuminate\Http\Request 实例注入控制器方法。
Illuminate\Http\Request,又能访问 id 参数。
下一步
路由
回顾路由定义方式以及与控制器的联动。