什么是控制器
除了将所有请求处理逻辑作为闭包定义在路由文件中,你还可以使用「控制器」类来组织这些行为。 控制器可以把相关的请求处理逻辑集中到一个类里。 例如,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 方法可以自动排除这两个路由。
依赖注入
构造器注入
Laravel 的服务容器会用于解析所有 Laravel 控制器的依赖。 因此,你可以在控制器构造器中通过类型提示声明它所需的依赖。 声明的依赖会被自动解析并注入到控制器实例中。方法注入
除了构造器注入外,你也可以在控制器方法上通过类型提示声明依赖。 方法注入常见的用途是将Illuminate\Http\Request 实例注入控制器方法。
Illuminate\Http\Request,又能访问 id 参数。
下一步
路由
回顾路由定义方式以及与控制器的联动。