01. Laravel 安装和路由
Laravel 是 PHP 最流行的 Web 框架,基于 MVC 模式。用 Composer 创建项目,artisan 是命令行工具。路由定义在 routes/web.php 里,Route::get/post/put/delete 分别对应 HTTP 方法。可以用闭包直接返回响应,也可以用控制器类。
php
<?php
// routes/web.php
Route::get("/", function () {
return view("welcome");
});
Route::get("/users", [UserController::class, "index"]);
Route::get("/users/{id}", [UserController::class, "show"]);
Route::post("/users", [UserController::class, "store"]);
// 路由分组 + 中间件
Route::middleware(["auth"])->prefix("admin")->group(function () {
Route::get("/dashboard", [AdminController::class, "index"]);
});
// 查看所有路由
// php artisan route:listRoute::resource 可以用一行代码生成 RESTful 的七个路由。
02. Eloquent ORM 操作
Eloquent 是 Laravel 自带的 ORM,每个数据库表对应一个 Model 类。一行 artisan 命令生成模型:php artisan make:model User。模型定义后,增删改查简单到令人发指。User::all() 查全部,User::find($id) 查一个,动态方法 User::where()->get() 条件查询。
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
protected $fillable = ["name", "email", "password"];
// 关联
public function posts() {
return $this->hasMany(Post::class);
}
}
// 使用
// 增
$user = User::create(["name" => "小明", "email" => "[email protected]", "password" => bcrypt("123456")]);
// 查
$users = User::where("age", ">", 18)->orderBy("name")->get();
$user = User::findOrFail(1);
// 改
$user->update(["name" => "新名字"]);
// 删
$user->delete();
// 关联查询
$userPosts = User::with("posts")->find(1);$fillable 或 $guarded 必须设置一个,用来防止批量赋值漏洞。白名单比黑名单更安全。
03. Blade 模板
Blade 是 Laravel 的模板引擎,文件以 .blade.php 结尾。{{ }} 输出变量并自动转义防 XSS,{!! !!} 输出不转义的 HTML。@if/@foreach/@for 控制结构,@extends 模板继承,@section/@yield 定义和填充区块。@include 引入子模板,@csrf 生成 CSRF token。
php
{{-- layouts/app.blade.php --}}
<!DOCTYPE html>
<html>
<head><title>@yield("title")</title></head>
<body>
@include("partials.header")
<main>@yield("content")</main>
@include("partials.footer")
</body>
</html>
{{-- users/index.blade.php --}}
@extends("layouts.app")
@section("title", "用户列表")
@section("content")
<h1>用户列表</h1>
@foreach ($users as $user)
<p>{{ $user->name }} - {{ $user->email }}</p>
@endforeach
@auth
<a href="/profile">个人中心</a>
@endauth
@guest
<a href="/login">请登录</a>
@endguest
@endsection{{ }} 会自动转义 HTML 特殊字符防止 XSS,不需要手动 htmlspecialchars。
04. Artisan 命令行
Artisan 是 Laravel 强大的命令行工具,能做很多事:生成代码(make:model、make:controller)、数据库迁移(migrate)、数据填充(seed)、启动开发服务器(serve)、缓存清理(cache:clear)、进入交互式环境(tinker)。记不住的命令用 php artisan list 查看。
bash
# 创建模型(同时生成迁移和工厂)
php artisan make:model Post -mf
# 数据库迁移
php artisan migrate
php artisan migrate:rollback
php artisan migrate:refresh --seed
# 数据填充
php artisan make:seeder UserSeeder
php artisan db:seed
# 创建控制器
php artisan make:controller UserController --resource
# 缓存
php artisan config:cache
php artisan route:cache
php artisan view:cache
# 开发服务器
php artisan serve --port=8080
# 交互式 REPL
php artisan tinkerphp artisan inspire 会随机显示一条鸡汤名言,给枯燥的开发加点乐子。
05. 请求验证和中间件
Form Request 是 Laravel 推荐的表单验证方式,把验证逻辑从控制器中抽离出来。rules 方法定义规则,messages 自定义错误消息。中间件是请求的过滤器,在进入控制器前执行。auth 中间件检查登录,throttle 限流,自定义中间件能做各种前置后置处理。
php
<?php
// Form Request
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest {
public function authorize(): bool {
return true;
}
public function rules(): array {
return [
"name" => "required|string|max:50",
"email" => "required|email|unique:users",
"age" => "integer|min:1|max:150",
];
}
public function messages(): array {
return [
"name.required" => "用户名不能为空",
"email.unique" => "该邮箱已注册",
];
}
}
// 控制器中使用
public function store(StoreUserRequest $request) {
// $request 已经验证通过
User::create($request->validated());
return redirect("/users")->with("success", "创建成功");
}Form Request 验证失败会自动重定向回上一页并带上错误信息,控制器只处理验证通过的数据。
知识测验
第 1/4 题正确 0
Laravel 的路由文件在哪里定义?
下一节
下一节 安全实践