控制器与操作
使用 artisan 创建控制器,并在操作方法中处理请求。
控制器与操作 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
什么是控制器
控制器用于组织相关的请求处理逻辑。您可以将请求委托给控制器方法(操作),而不是在路由文件中使用闭包。
生成控制器
使用 Artisan 搭建控制器的基本结构。
$ php artisan make:controller UserController
$ php artisan make:controller PostController --resource基本控制器
控制器继承自 Controller,并为每个路由操作提供公共方法。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function index(): \Illuminate\View\View
{
$users = User::all();
return view("users.index", compact("users"));
}
}访问请求
在操作方法中为 Illuminate\Http\Request 添加类型提示,Laravel 会自动注入该对象。
<?php
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$name = $request->input("name");
$email = $request->input("email");
User::create(["name" => $name, "email" => $email]);
return redirect()->route("users.index");
}表单验证
使用 $request->validate() 验证输入。验证失败时,Laravel 会自动重定向回原页面并附带错误信息。
<?php
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$validated = $request->validate([
"name" => "required|string|max:255",
"email" => "required|email|unique:users",
]);
User::create($validated);
return redirect()->route("users.index");
}资源控制器方法
资源控制器有 7 个约定方法:index、create、store、show、edit、update、destroy。
单操作控制器
可调用控制器只有一个 __invoke() 方法,非常适合只执行一项操作的任务。
<?php
class SendWelcomeEmail extends Controller
{
public function __invoke(User $user): void
{
Mail::to($user)->send(new WelcomeMail($user));
}
}
// Route:
Route::post("/users/{user}/welcome", SendWelcomeEmail::class);控制器中间件
在构造方法中使用 middleware() 方法,将中间件应用到指定操作。
<?php
public function __construct()
{
$this->middleware("auth")->except(["index", "show"]);
}依赖注入
在操作方法的参数中为服务添加类型提示,Laravel 会从服务容器中解析这些服务。
<?php
public function store(Request $request, Mailer $mailer): JsonResponse
{
// $mailer is auto-injected
}返回响应
控制器可以返回:视图、重定向、JSON 响应和文件下载。
<?php
return view("users.show", compact("user"));
return redirect()->back()->with("status", "Saved!");
return response()->json($user);
return response()->download(storage_path("report.pdf"));控制器命名空间
默认情况下,所有控制器都位于 App\Http\Controllers 中。子目录会创建子命名空间,例如:App\Http\Controllers\Admin\UserController。
保持控制器精简
控制器应将业务逻辑委托给服务类或操作。请尽量让控制器只负责:验证输入、调用服务、返回响应。
总结
使用 Artisan 生成控制器。为 Request 和服务添加类型提示,以实现自动注入。使用 validate() 验证输入。保持控制器精简,将工作委托给服务。
快速检查
哪个 Artisan 命令可以生成资源控制器?
常见问题解答
「控制器与操作」课时是免费的吗?
是的 — 「控制器与操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「控制器与操作」这节课中我会学到什么?
使用 artisan 创建控制器,并在操作方法中处理请求。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「控制器与操作」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。