0Pricing
PHP Academy · 课时

控制器与操作

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Laravel 项目结构
  2. 在 Laravel 中定义路由
  3. 控制器与操作
  4. Blade 模板与视图
← 返回 PHP Academy