Laravel 学习指南

本指南包含 Laravel 的核心概念、详细注释和实例代码,帮助您快速学习 Laravel 技术。

1. Laravel 简介

1.1 什么是 Laravel?

Laravel 是一个基于 PHP 的优雅 Web 应用框架,由 Taylor Otwell 创建。它遵循 MVC 架构模式,提供了丰富的功能组件,包括路由、数据库 ORM、模板引擎、队列、缓存等,旨在让 Web 开发变得更加简单和愉悦。

1.2 Laravel 的优势

1.3 Laravel 版本

2. 环境搭建

2.1 系统要求

// Laravel 11.x 系统要求
PHP >= 8.2
Composer
MySQL >= 5.7 或 PostgreSQL >= 9.6
Apache/Nginx
mod_rewrite(Apache)或 URL 重写(Nginx)
OpenSSL PHP 扩展
PDO PHP 扩展
Mbstring PHP 扩展
Tokenizer PHP 扩展
XML PHP 扩展
Ctype PHP 扩展
JSON PHP 扩展
BCMath PHP 扩展

2.2 安装 Laravel

// 使用 Composer 创建 Laravel 项目
composer create-project laravel/laravel my-app

// 进入项目目录
cd my-app

// 启动开发服务器
php artisan serve

// 访问应用
// http://localhost:8000

// 使用 Laravel 安装器(需要先全局安装)
composer global require laravel/installer

// 创建新项目
laravel new my-app

2.3 目录结构

// Laravel 目录结构
my-app/
├── app/              // 应用核心代码
│   ├── Console/      // 命令行命令
│   ├── Exceptions/    // 异常处理
│   ├── Http/         // HTTP 层
│   │   ├── Controllers/  // 控制器
│   │   ├── Middleware/   // 中间件
│   │   └── Requests/     // 表单请求
│   ├── Models/       // 模型
│   └── Providers/    // 服务提供者
├── bootstrap/        // 框架启动文件
├── config/           // 配置文件
├── database/         // 数据库相关
│   ├── factories/    // 模型工厂
│   ├── migrations/   // 数据库迁移
│   └── seeders/      // 数据填充
├── public/           // 公共访问目录
│   └── index.php    // 入口文件
├── resources/        // 资源文件
│   ├── css/         // CSS 文件
│   ├── js/          // JavaScript 文件
│   └── views/       // 视图文件
├── routes/           // 路由文件
│   ├── api.php      // API 路由
│   ├── channels.php  // 广播频道
│   ├── console.php   // 控制台路由
│   └── web.php       // Web 路由
├── storage/          // 存储目录
│   ├── app/         // 应用文件
│   ├── framework/   // 框架生成文件
│   └── logs/        // 日志文件
├── tests/            // 测试文件
├── vendor/           // Composer 依赖
├── .env              // 环境配置
├── artisan           // 命令行工具
└── composer.json     // Composer 配置

2.4 配置文件

// .env - 环境配置文件
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:your-app-key
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"

3. MVC 架构

3.1 什么是 MVC?

MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个核心部分:

3.2 Laravel 中的 MVC

// 控制器(Controller)
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    // 用户列表方法
    public function index()
    {
        // 调用模型获取数据
        $users = User::all();
        
        // 渲染视图
        return view('users.index', compact('users'));
    }
    
    // 用户详情方法
    public function show($id)
    {
        // 根据ID获取用户
        $user = User::findOrFail($id);
        
        // 渲染视图
        return view('users.show', compact('user'));
    }
}

// 模型(Model)
// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // 指定表名
    protected $table = 'users';
    
    // 指定主键
    protected $primaryKey = 'id';
    
    // 自动时间戳
    public $timestamps = true;
    
    // 可填充字段
    protected $fillable = ['name', 'email', 'password'];
    
    // 隐藏字段
    protected $hidden = ['password', 'remember_token'];
}

// 视图(View)
// resources/views/users/index.blade.php
@extends('layouts.app')

@section('content')
    <div class="container">
        <h1>用户列表</h1>
        
        <ul>
            @foreach($users as $user)
                <li>{{ $user->name }}</li>
            @endforeach
        </ul>
    </div>
@endsection

实例:MVC 架构

Laravel 代码示例

// 控制器:app/Http/Controllers/IndexController.php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    // 首页方法:显示用户统计信息
    public function index()
    {
        // 调用模型获取统计数据
        $userCount = User::count();
        $activeUsers = User::where('status', 1)->count();
        
        // 传递数据到视图
        return view('index', [
            'title' => '用户管理系统',
            'userCount' => $userCount,
            'activeUsers' => $activeUsers
        ]);
    }
    
    // 用户详情方法:显示单个用户信息
    public function user($id)
    {
        // 根据ID获取用户,如果不存在则抛出404异常
        $user = User::with('posts')->findOrFail($id);
        
        // 渲染视图并传递用户数据
        return view('users.show', compact('user'));
    }
}

4. 路由

4.1 基本路由

// routes/web.php - Web 路由
use Illuminate\Support\Facades\Route;

// 基本路由
Route::get('/', function () {
    return view('welcome');
});

// 返回字符串
Route::get('/hello', function () {
    return 'Hello World!';
});

// 返回 JSON
Route::get('/api', function () {
    return response()->json(['message' => 'Hello API']);
});

// 带参数的路由
Route::get('/user/{id}', function ($id) {
    return 'User ID: ' . $id;
});

// 可选参数
Route::get('/user/{name?}', function ($name = 'Guest') {
    return 'Hello, ' . $name;
});

// 正则表达式约束
Route::get('/user/{id}', function ($id) {
    return 'User ID: ' . $id;
})->where('id', '[0-9]+');

// 多个参数
Route::get('/post/{post}/comment/{comment}', function ($postId, $commentId) {
    return "Post: {$postId}, Comment: {$commentId}";
});

4.2 路由命名

// 命名路由
Route::get('/user/profile', function () {
    return 'User Profile';
})->name('profile');

// 控制器路由命名
Route::get('/user/profile', [UserController::class, 'profile'])->name('user.profile');

// 生成命名路由 URL
$url = route('profile');
$url = route('user.profile', ['id' => 1]);

// 重定向到命名路由
return redirect()->route('profile');
return redirect()->route('user.profile', ['id' => 1]);

4.3 路由分组

// 路由分组
Route::prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
});

// 带中间件的路由分组
Route::middleware(['auth', 'admin'])->group(function () {
    Route::get('/dashboard', [AdminController::class, 'dashboard']);
    Route::get('/users', [AdminController::class, 'users']);
});

// 子域名路由
Route::domain('admin.example.com')->group(function () {
    Route::get('/', [AdminController::class, 'index']);
});

// 命名空间路由
Route::namespace('Admin')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
});

4.4 RESTful 资源路由

// 资源路由
Route::resource('users', UserController::class);

// 等同于以下路由
// Route::get('/users', [UserController::class, 'index'])->name('users.index');
// Route::get('/users/create', [UserController::class, 'create'])->name('users.create');
// Route::post('/users', [UserController::class, 'store'])->name('users.store');
// Route::get('/users/{user}', [UserController::class, 'show'])->name('users.show');
// Route::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit');
// Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update');
// Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy');

// 限制资源路由
Route::resource('users', UserController::class)
    ->only(['index', 'show']);

// 排除某些路由
Route::resource('users', UserController::class)
    ->except(['create', 'edit']);

// API 资源路由(不包含 create 和 edit)
Route::apiResource('users', UserController::class);

// 嵌套资源路由
Route::resource('users.posts', PostController::class);

实例:路由配置

Laravel 代码示例

// routes/web.php - Web 路由配置
use App\Http\Controllers\UserController;
use App\Http\Controllers\PostController;
use App\Http\Controllers\HomeController;
use Illuminate\Support\Facades\Route;

// 首页路由
Route::get('/', [HomeController::class, 'index'])->name('home');

// 用户路由组
Route::prefix('users')->name('users.')->group(function () {
    // 用户列表
    Route::get('/', [UserController::class, 'index'])->name('index');
    
    // 用户创建
    Route::get('/create', [UserController::class, 'create'])->name('create');
    
    // 用户保存
    Route::post('/', [UserController::class, 'store'])->name('store');
    
    // 用户详情
    Route::get('/{user}', [UserController::class, 'show'])->name('show');
    
    // 用户编辑
    Route::get('/{user}/edit', [UserController::class, 'edit'])->name('edit');
    
    // 用户更新
    Route::put('/{user}', [UserController::class, 'update'])->name('update');
    
    // 用户删除
    Route::delete('/{user}', [UserController::class, 'destroy'])->name('destroy');
});

// 文章路由组(使用资源路由)
Route::resource('posts', PostController::class);

// API 路由
Route::prefix('api')->name('api.')->group(function () {
    // 用户 API
    Route::apiResource('users', UserController::class);
    
    // 文章 API
    Route::apiResource('posts', PostController::class);
});

// 认证路由(使用 Laravel Breeze 或 Jetstream)
Auth::routes();

5. 控制器

5.1 创建控制器

// 使用 Artisan 命令创建控制器
php artisan make:controller UserController

// 创建资源控制器
php artisan make:controller UserController --resource

// 创建模型控制器
php artisan make:controller UserController --model=User

// 创建 API 控制器
php artisan make:controller Api/UserController --api

5.2 基本控制器

// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class UserController extends Controller
{
    // 用户列表
    public function index()
    {
        $users = User::paginate(10);
        
        return view('users.index', compact('users'));
    }
    
    // 用户详情
    public function show($id)
    {
        $user = User::findOrFail($id);
        
        return view('users.show', compact('user'));
    }
    
    // 创建用户表单
    public function create()
    {
        return view('users.create');
    }
    
    // 保存用户
    public function store(Request $request)
    {
        // 验证数据
        $validated = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:6'
        ]);
        
        // 创建用户
        $user = User::create([
            'name' => $validated['name'],
            'email' => $validated['email'],
            'password' => bcrypt($validated['password'])
        ]);
        
        return redirect()->route('users.show', $user->id)
            ->with('success', '用户创建成功');
    }
    
    // 编辑用户表单
    public function edit($id)
    {
        $user = User::findOrFail($id);
        
        return view('users.edit', compact('user'));
    }
    
    // 更新用户
    public function update(Request $request, $id)
    {
        $user = User::findOrFail($id);
        
        $validated = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email,' . $id
        ]);
        
        $user->update($validated);
        
        return redirect()->route('users.show', $user->id)
            ->with('success', '用户更新成功');
    }
    
    // 删除用户
    public function destroy($id)
    {
        $user = User::findOrFail($id);
        $user->delete();
        
        return redirect()->route('users.index')
            ->with('success', '用户删除成功');
    }
}

5.3 单一动作控制器

// app/Http/Controllers/ShowProfile.php
namespace App\Http\Controllers;

use App\Models\User;

class ShowProfile extends Controller
{
    // 单一动作控制器
    public function __invoke($id)
    {
        $user = User::findOrFail($id);
        
        return view('users.profile', compact('user'));
    }
}

// 路由定义
Route::get('/user/{id}', ShowProfile::class);

5.4 控制器中间件

// 在控制器构造函数中应用中间件
public function __construct()
{
    // 对所有方法应用中间件
    $this->middleware('auth');
    
    // 对特定方法应用中间件
    $this->middleware('log')->only(['index', 'show']);
    
    // 排除特定方法
    $this->middleware('throttle:60,1')->except(['index']);
    
    // 使用中间件组
    $this->middleware(['auth', 'verified']);
}

实例:控制器

Laravel 代码示例

// app/Http/Controllers/UserController.php - 用户控制器
namespace App\Http\Controllers;

use App\Models\User;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class UserController extends Controller
{
    // 构造函数:应用中间件
    public function __construct()
    {
        // 对所有方法应用认证中间件
        $this->middleware('auth');
        
        // 对特定方法应用权限检查
        $this->middleware('can:manage-users')->except(['index', 'show']);
    }
    
    // 用户列表:分页查询
    public function index(Request $request): JsonResponse
    {
        // 获取分页和搜索参数
        $page = $request->input('page', 1);
        $limit = $request->input('limit', 10);
        $keyword = $request->input('keyword', '');
        
        // 构建查询
        $query = User::query();
        
        // 关键词搜索
        if ($keyword) {
            $query->where('name', 'like', '%' . $keyword . '%')
                  ->orWhere('email', 'like', '%' . $keyword . '%');
        }
        
        // 分页查询
        $users = $query->orderBy('id', 'desc')
                       ->paginate($limit, ['*'], 'page', $page);
        
        // 返回 JSON 响应
        return response()->json([
            'code' => 200,
            'message' => 'success',
            'data' => $users
        ]);
    }
    
    // 用户详情:显示单个用户信息
    public function show($id): JsonResponse
    {
        // 查找用户,如果不存在则抛出 404 异常
        $user = User::with(['posts', 'roles'])->findOrFail($id);
        
        return response()->json([
            'code' => 200,
            'message' => 'success',
            'data' => $user
        ]);
    }
    
    // 创建用户:使用表单请求验证
    public function store(StoreUserRequest $request): JsonResponse
    {
        // 获取验证后的数据
        $validated = $request->validated();
        
        // 加密密码
        $validated['password'] = bcrypt($validated['password']);
        
        // 创建用户
        $user = User::create($validated);
        
        // 分配默认角色
        $user->assignRole('user');
        
        return response()->json([
            'code' => 201,
            'message' => '用户创建成功',
            'data' => $user
        ], 201);
    }
    
    // 更新用户:使用表单请求验证
    public function update(UpdateUserRequest $request, $id): JsonResponse
    {
        // 查找用户
        $user = User::findOrFail($id);
        
        // 获取验证后的数据
        $validated = $request->validated();
        
        // 如果提供了新密码,则加密
        if (isset($validated['password'])) {
            $validated['password'] = bcrypt($validated['password']);
        }
        
        // 更新用户
        $user->update($validated);
        
        return response()->json([
            'code' => 200,
            'message' => '用户更新成功',
            'data' => $user
        ]);
    }
    
    // 删除用户
    public function destroy($id): JsonResponse
    {
        // 查找用户
        $user = User::findOrFail($id);
        
        // 删除用户(软删除)
        $user->delete();
        
        return response()->json([
            'code' => 200,
            'message' => '用户删除成功'
        ]);
    }
}

6. 模型(Eloquent ORM)

6.1 创建模型

// 使用 Artisan 命令创建模型
php artisan make:model User

// 创建模型并生成迁移
php artisan make:model User --migration

// 创建模型、控制器和迁移
php artisan make:model User -mcr

// 创建 API 资源控制器
php artisan make:model User -a

6.2 基本模型

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use HasFactory, SoftDeletes;
    
    // 指定表名
    protected $table = 'users';
    
    // 指定主键
    protected $primaryKey = 'id';
    
    // 主键是否自增
    public $incrementing = true;
    
    // 主键类型
    protected $keyType = 'int';
    
    // 自动时间戳
    public $timestamps = true;
    
    // 时间戳格式
    protected $dateFormat = 'U';
    
    // 可批量赋值的属性
    protected $fillable = ['name', 'email', 'password'];
    
    // 不可批量赋值的属性
    protected $guarded = ['id'];
    
    // 隐藏属性
    protected $hidden = ['password', 'remember_token'];
    
    // 可见属性
    protected $visible = ['id', 'name', 'email'];
    
    // 属性类型转换
    protected $casts = [
        'email_verified_at' => 'datetime',
        'is_admin' => 'boolean',
        'settings' => 'array'
    ];
    
    // 软删除字段
    protected $dates = ['deleted_at'];
}

6.3 模型查询

// 查询所有数据
$users = User::all();

// 查询单条数据
$user = User::find(1);
$user = User::findOrFail(1);
$user = User::where('id', 1)->first();

// 条件查询
$users = User::where('status', 1)->get();
$users = User::where('status', 1)->where('age', '>', 18)->get();

// 多条件查询
$users = User::where([
    'status' => 1,
    'type' => 1
])->get();

// 排序
$users = User::orderBy('id', 'desc')->get();

// 限制
$users = User::limit(10)->get();

// 分页
$users = User::paginate(10);

// 统计
$count = User::count();
$sum = User::where('status', 1)->sum('amount');
$avg = User::where('status', 1)->avg('score');

// 选择特定字段
$users = User::select('id', 'name', 'email')->get();

// 使用 chunk 处理大量数据
User::chunk(200, function ($users) {
    foreach ($users as $user) {
        // 处理用户
    }
});

6.4 模型关联

// 一对一关联
class User extends Model
{
    // 用户档案
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}

// 使用关联
$user = User::find(1);
$profile = $user->profile;

// 一对多关联
class User extends Model
{
    // 用户文章
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// 使用关联
$user = User::find(1);
$posts = $user->posts;

// 多对多关联
class User extends Model
{
    // 用户角色
    public function roles()
    {
        return $this->belongsToMany(Role::class, 'user_role');
    }
}

// 使用关联
$user = User::find(1);
$roles = $user->roles;

// 远程一对多关联
class Country extends Model
{
    // 国家的所有文章
    public function posts()
    {
        return $this->hasManyThrough(Post::class, User::class);
    }
}

// 多态关联
class Post extends Model
{
    // 评论
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

// 预加载关联(解决 N+1 查询问题)
$users = User::with('posts')->get();
$users = User::with(['posts', 'roles'])->get();
$users = User::with('posts.comments')->get();

6.5 模型访问器和修改器

// 访问器:获取属性时自动调用
class User extends Model
{
    // 获取全名
    public function getFullNameAttribute()
    {
        return $this->first_name . ' ' . $this->last_name;
    }
    
    // 获取格式化的创建时间
    public function getFormattedCreatedAtAttribute()
    {
        return $this->created_at->format('Y-m-d H:i:s');
    }
}

// 使用访问器
$user = User::find(1);
echo $user->full_name;
echo $user->formatted_created_at;

// 修改器:设置属性时自动调用
class User extends Model
{
    // 设置密码
    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }
    
    // 设置邮箱
    public function setEmailAttribute($value)
    {
        $this->attributes['email'] = strtolower($value);
    }
}

// 使用修改器
$user = new User();
$user->password = 'secret'; // 自动加密
$user->email = 'USER@EXAMPLE.COM'; // 自动转小写
$user->save();

实例:模型

Laravel 代码示例

// app/Models/User.php - 用户模型
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Model
{
    use HasFactory, SoftDeletes, Notifiable, HasApiTokens;
    
    // 可批量赋值的属性
    protected $fillable = [
        'name',
        'email',
        'password',
        'phone',
        'status',
        'avatar'
    ];
    
    // 隐藏属性
    protected $hidden = [
        'password',
        'remember_token'
    ];
    
    // 属性类型转换
    protected $casts = [
        'email_verified_at' => 'datetime',
        'status' => 'boolean',
        'settings' => 'array'
    ];
    
    // 访问器:获取状态文本
    public function getStatusTextAttribute(): string
    {
        return $this->status ? '启用' : '禁用';
    }
    
    // 访问器:获取头像 URL
    public function getAvatarUrlAttribute(): string
    {
        if ($this->avatar) {
            return asset('storage/' . $this->avatar);
        }
        return asset('images/default-avatar.png');
    }
    
    // 修改器:设置密码
    public function setPasswordAttribute(string $value): void
    {
        $this->attributes['password'] = bcrypt($value);
    }
    
    // 修改器:设置邮箱
    public function setEmailAttribute(string $value): void
    {
        $this->attributes['email'] = strtolower($value);
    }
    
    // 作用域:查询活跃用户
    public function scopeActive($query)
    {
        return $query->where('status', true);
    }
    
    // 作用域:搜索用户
    public function scopeSearch($query, $keyword)
    {
        return $query->where('name', 'like', '%' . $keyword . '%')
                     ->orWhere('email', 'like', '%' . $keyword . '%');
    }
    
    // 关联:用户文章
    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
    
    // 关联:用户角色
    public function roles(): BelongsToMany
    {
        return $this->belongsToMany(Role::class, 'user_role');
    }
    
    // 关联:用户评论
    public function comments(): HasMany
    {
        return $this->hasMany(Comment::class);
    }
    
    // 检查用户是否有指定角色
    public function hasRole(string $role): bool
    {
        return $this->roles()->where('name', $role)->exists();
    }
    
    // 分配角色
    public function assignRole(string $role): void
    {
        $roleModel = Role::where('name', $role)->firstOrFail();
        $this->roles()->attach($roleModel->id);
    }
    
    // 移除角色
    public function removeRole(string $role): void
    {
        $roleModel = Role::where('name', $role)->firstOrFail();
        $this->roles()->detach($roleModel->id);
    }
}

7. 视图(Blade 模板)

7.1 基本视图

// 渲染视图
return view('welcome');

// 传递数据到视图
return view('welcome', ['name' => 'John']);

// 使用 compact 函数
$name = 'John';
return view('welcome', compact('name'));

// 使用 with 方法
return view('welcome')->with('name', 'John');

// 共享数据到所有视图
// app/Providers/AppServiceProvider.php
public function boot()
{
    View::share('currentUser', auth()->user());
}

7.2 Blade 模板语法

// 输出变量
{{ $name }}

// 输出未转义的 HTML
{!! $html !!}

// 默认值
{{ $name ?? 'Guest' }}

// 三元运算符
{{ $name ? $name : 'Guest' }}

// 条件判断
@if ($status == 1)
    启用
@elseif ($status == 0)
    禁用
@else
    未知
@endif

// 循环
@foreach ($users as $user)
    {{ $user->name }}
@endforeach

// for 循环
@for ($i = 0; $i < 10; $i++)
    {{ $i }}
@endfor

// while 循环
@while ($count > 0)
    {{ $count }}
    @php($count--)
@endwhile

// foreach 循环(带索引)
@foreach ($users as $index => $user)
    {{ $index + 1 }}. {{ $user->name }}
@endforeach

// 检查变量是否存在
@isset($user)
    {{ $user->name }}
@endisset

@empty($users)
    没有用户
@endempty

7.3 Blade 模板继承

// 布局模板:resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html>
<head>
    <title>@yield('title', 'Laravel')</title>
</head>
<body>
    @yield('content')
</body>
</html>

// 子模板:resources/views/home.blade.php
@extends('layouts.app')

@section('title', '首页')

@section('content')
    <h1>欢迎来到 Laravel</h1>
@endsection

7.4 Blade 组件

// 创建组件
php artisan make:component Alert

// 使用组件
<x-alert type="success">
    操作成功
</x-alert>

// 带槽位的组件
<x-card>
    <x-slot:title>标题</x-slot>
    <x-slot:footer>页脚</x-slot>
    
    内容
</x-card>

// 内联组件
<x-button type="submit">提交</x-button>

7.5 Blade 指令

// CSRF 令牌
@csrf

// 方法字段
@method('PUT')

// 包含子视图
@include('partials.header')

// 包含并传递数据
@include('partials.header', ['title' => '首页'])

// 条件包含
@includeWhen($isLogin, 'partials.user-menu')
@includeUnless($isLogin, 'partials.guest-menu')

// 包含第一个存在的视图
@includeFirst(['partials.custom-header', 'partials.header'])

// 循环包含
@foreach ($users as $user)
    @include('partials.user-card', ['user' => $user])
@endforeach

// 验证错误显示
@error('email')
    {{ $message }}
@enderror

// 认证检查
@auth
    已登录
@endauth

@guest
    未登录
@endguest

实例:视图

Laravel 代码示例

// resources/views/layouts/app.blade.php - 布局模板
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@yield('title', 'Laravel')</title>
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">
    @stack('styles')
</head>
<body>
    @include('partials.header')
    
    <main class="container">
        @yield('content')
    </main>
    
    @include('partials.footer')
    
    <script src="{{ asset('js/app.js') }}"></script>
    @stack('scripts')
</body>
</html>

// resources/views/users/index.blade.php - 用户列表视图
@extends('layouts.app')

@section('title', '用户列表')

@section('content')
    <div class="page-header">
        <h1>用户列表</h1>
        <a href="{{ route('users.create') }}" class="btn btn-primary">添加用户</a>
    </div>
    
    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif
    
    <table class="table">
        <thead>
            <tr>
                <th>ID</th>
                <th>姓名</th>
                <th>邮箱</th>
                <th>状态</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                    <td>
                        @if($user->status)
                            <span class="badge badge-success">启用</span>
                        @else
                            <span class="badge badge-danger">禁用</span>
                        @endif
                    </td>
                    <td>
                        <a href="{{ route('users.show', $user) }}">查看</a>
                        <a href="{{ route('users.edit', $user) }}">编辑</a>
                        <form action="{{ route('users.destroy', $user) }}" method="POST">
                            @csrf
                            @method('DELETE')
                            <button type="submit">删除</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
    
    {{ $users->links() }}
@endsection

8. 数据库操作

8.1 数据库配置

// config/database.php - 数据库配置
return [
    'default' => env('DB_CONNECTION', 'mysql'),
    
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
    ],
];

8.2 数据库迁移

// 创建迁移
php artisan make:migration create_users_table

// 运行迁移
php artisan migrate

// 回滚迁移
php artisan migrate:rollback

// 回滚所有迁移
php artisan migrate:reset

// 回滚并重新运行所有迁移
php artisan migrate:refresh

// 删除所有表并重新运行迁移
php artisan migrate:fresh

// 迁移文件示例
// database/migrations/2024_01_01_000000_create_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    // 创建表
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
        });
    }
    
    // 删除表
    public function down()
    {
        Schema::dropIfExists('users');
    }
};

8.3 查询构建器

// 使用查询构建器
use Illuminate\Support\Facades\DB;

// 查询数据
$users = DB::table('users')->get();
$user = DB::table('users')->where('id', 1)->first();

// 插入数据
$id = DB::table('users')->insertGetId([
    'name' => '张三',
    'email' => 'zhangsan@example.com',
    'password' => bcrypt('password')
]);

// 更新数据
DB::table('users')->where('id', 1)->update([
    'name' => '李四'
]);

// 删除数据
DB::table('users')->where('id', 1)->delete();

// 链式查询
$users = DB::table('users')
    ->where('status', 1)
    ->where('age', '>', 18)
    ->orderBy('id', 'desc')
    ->limit(10)
    ->get();

// 聚合查询
$count = DB::table('users')->count();
$sum = DB::table('orders')->sum('amount');
$avg = DB::table('orders')->avg('amount');
$max = DB::table('orders')->max('amount');
$min = DB::table('orders')->min('amount');

// 分组查询
$users = DB::table('users')
    ->select('role', DB::raw('COUNT(*) as count'))
    ->groupBy('role')
    ->get();

// 连接查询
$users = DB::table('users')
    ->join('posts', 'users.id', '=', 'posts.user_id')
    ->select('users.*', 'posts.title as post_title')
    ->get();

// 左连接
$users = DB::table('users')
    ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
    ->get();

8.4 事务处理

// 手动事务
DB::beginTransaction();
try {
    DB::table('users')->where('id', 1)->decrement('balance', 100);
    DB::table('users')->where('id', 2)->increment('balance', 100);
    
    DB::commit();
} catch (\Exception $e) {
    DB::rollBack();
    throw $e;
}

// 闭包事务
DB::transaction(function () {
    DB::table('users')->where('id', 1)->decrement('balance', 100);
    DB::table('users')->where('id', 2)->increment('balance', 100);
});

// 指定重试次数
DB::transaction(function () {
    // 数据库操作
}, 3);

实例:数据库操作

Laravel 代码示例

// app/Services/UserService.php - 用户服务
namespace App\Services;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Models\User;

class UserService
{
    // 获取用户列表:分页查询
    public function getUserList(int $page = 1, int $limit = 10, string $keyword = '')
    {
        $query = User::query();
        
        // 关键词搜索
        if ($keyword) {
            $query->where('name', 'like', '%' . $keyword . '%')
                  ->orWhere('email', 'like', '%' . $keyword . '%');
        }
        
        // 分页查询
        $result = $query->orderBy('id', 'desc')
                       ->paginate($limit, ['*'], 'page', $page);
        
        return $result;
    }
    
    // 获取用户详情
    public function getUserDetail(int $id)
    {
        $user = User::with(['posts', 'roles'])->find($id);
        
        if (!$user) {
            throw new \Exception('用户不存在');
        }
        
        return $user;
    }
    
    // 创建用户:使用事务
    public function createUser(array $data)
    {
        return DB::transaction(function () use ($data) {
            // 检查邮箱是否已存在
            $exists = User::where('email', $data['email'])->exists();
            
            if ($exists) {
                throw new \Exception('邮箱已存在');
            }
            
            // 创建用户
            $user = User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
                'phone' => $data['phone'] ?? null,
                'status' => true
            ]);
            
            // 记录日志
            Log::info('用户创建成功', [
                'user_id' => $user->id,
                'name' => $user->name
            ]);
            
            return $user;
        });
    }
    
    // 更新用户
    public function updateUser(int $id, array $data)
    {
        $user = User::find($id);
        
        if (!$user) {
            throw new \Exception('用户不存在');
        }
        
        // 检查邮箱是否被其他用户使用
        if (isset($data['email']) && $data['email'] != $user->email) {
            $exists = User::where('email', $data['email'])
                         ->where('id', '<>', $id)
                         ->exists();
            
            if ($exists) {
                throw new \Exception('邮箱已被使用');
            }
        }
        
        // 更新用户
        $user->update($data);
        
        return $user;
    }
    
    // 删除用户:软删除
    public function deleteUser(int $id)
    {
        $user = User::find($id);
        
        if (!$user) {
            throw new \Exception('用户不存在');
        }
        
        // 软删除
        $user->delete();
        
        return true;
    }
    
    // 转账:使用事务确保数据一致性
    public function transfer(int $fromId, int $toId, float $amount)
    {
        return DB::transaction(function () use ($fromId, $toId, $amount) {
            // 检查发送方余额
            $fromUser = User::where('id', $fromId)
                           ->lockForUpdate()
                           ->first();
            
            if (!$fromUser || $fromUser->balance < $amount) {
                throw new \Exception('余额不足');
            }
            
            // 检查接收方是否存在
            $toUser = User::find($toId);
            
            if (!$toUser) {
                throw new \Exception('接收方不存在');
            }
            
            // 扣减发送方余额
            $fromUser->decrement('balance', $amount);
            
            // 增加接收方余额
            $toUser->increment('balance', $amount);
            
            // 记录转账日志
            DB::table('transfer_logs')->insert([
                'from_id' => $fromId,
                'to_id' => $toId,
                'amount' => $amount,
                'created_at' => now()
            ]);
            
            return true;
        });
    }
}

9. 中间件

9.1 创建中间件

// 创建中间件
php artisan make:middleware Auth

// app/Http/Middleware/Auth.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Auth
{
    // 处理请求
    public function handle(Request $request, Closure $next)
    {
        // 检查用户是否登录
        if (!auth()->check()) {
            return redirect('/login');
        }
        
        // 继续执行
        return $next($request);
    }
}

9.2 注册中间件

// app/Http/Kernel.php - 注册中间件
protected $middleware = [
    // 全局中间件
    \App\Http\Middleware\TrustProxies::class,
    \Illuminate\Http\Middleware\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
    
    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];

9.3 使用中间件

// 在路由中使用中间件
Route::get('/admin', [AdminController::class, 'index'])
    ->middleware('auth');

// 使用多个中间件
Route::get('/admin', [AdminController::class, 'index'])
    ->middleware(['auth', 'admin']);

// 使用中间件组
Route::middleware(['web'])->group(function () {
    Route::get('/', [HomeController::class, 'index']);
    Route::get('/about', [HomeController::class, 'about']);
});

// 在控制器中使用中间件
public function __construct()
{
    $this->middleware('auth');
    $this->middleware('admin')->only(['create', 'store']);
    $this->middleware('log')->except(['index', 'show']);
}

9.4 中间件参数

// 带参数的中间件
Route::get('/admin', [AdminController::class, 'index'])
    ->middleware('role:admin');

// app/Http/Middleware/CheckRole.php
public function handle(Request $request, Closure $next, $role)
{
    if (!$request->user()->hasRole($role)) {
        abort(403);
    }
    
    return $next($request);
}

实例:中间件

Laravel 代码示例

// app/Http/Middleware/ApiAuth.php - API 认证中间件
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class ApiAuth
{
    // 处理请求
    public function handle(Request $request, Closure $next)
    {
        // 检查用户是否认证
        if (!Auth::guard('api')->check()) {
            return response()->json([
                'code' => 401,
                'message' => '未授权'
            ], 401);
        }
        
        // 继续执行
        return $next($request);
    }
}

// app/Http/Middleware/LogRequest.php - 请求日志中间件
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class LogRequest
{
    // 处理请求
    public function handle(Request $request, Closure $next)
    {
        // 记录请求开始时间
        $startTime = microtime(true);
        
        // 继续执行
        $response = $next($request);
        
        // 计算执行时间
        $executeTime = microtime(true) - $startTime;
        
        // 记录日志
        Log::info('请求日志', [
            'url' => $request->url(),
            'method' => $request->method(),
            'ip' => $request->ip(),
            'user_id' => auth()->id(),
            'execute_time' => $executeTime,
            'response_code' => $response->getStatusCode()
        ]);
        
        return $response;
    }
}

// app/Http/Middleware/Cors.php - 跨域中间件
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class Cors
{
    // 处理请求
    public function handle(Request $request, Closure $next)
    {
        // 继续执行
        $response = $next($request);
        
        // 设置跨域头
        $response->headers->set('Access-Control-Allow-Origin', '*');
        $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
        $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With');
        $response->headers->set('Access-Control-Max-Age', '86400');
        
        // 处理预检请求
        if ($request->isMethod('OPTIONS')) {
            return response('', 200);
        }
        
        return $response;
    }
}

10. 验证

10.1 控制器验证

// 在控制器中验证
public function store(Request $request)
{
    // 验证数据
    $validated = $request->validate([
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6|confirmed'
    ]);
    
    // 验证通过,继续处理
    User::create($validated);
    
    return redirect()->back()->with('success', '用户创建成功');
}

// 手动创建验证器
public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
        'email' => 'required|email|unique:users',
        'password' => 'required|min:6'
    ]);
    
    if ($validator->fails()) {
        return redirect()->back()
            ->withErrors($validator)
            ->withInput();
    }
    
    // 验证通过
    User::create($request->all());
    
    return redirect()->back()->with('success', '用户创建成功');
}

10.2 表单请求验证

// 创建表单请求
php artisan make:request StoreUserRequest

// app/Http/Requests/StoreUserRequest.php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class StoreUserRequest extends FormRequest
{
    // 确定用户是否有权限进行此请求
    public function authorize()
    {
        return true;
    }
    
    // 获取验证规则
    public function rules()
    {
        return [
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'phone' => 'nullable|string|max:20',
            'status' => 'nullable|boolean'
        ];
    }
    
    // 自定义错误消息
    public function messages()
    {
        return [
            'name.required' => '姓名不能为空',
            'name.max' => '姓名最多255个字符',
            'email.required' => '邮箱不能为空',
            'email.email' => '邮箱格式不正确',
            'email.unique' => '邮箱已存在',
            'password.required' => '密码不能为空',
            'password.min' => '密码至少6个字符',
            'password.confirmed' => '两次密码不一致'
        ];
    }
    
    // 自定义验证属性名称
    public function attributes()
    {
        return [
            'name' => '姓名',
            'email' => '邮箱',
            'password' => '密码'
        ];
    }
    
    // 验证失败处理
    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(
            response()->json([
                'code' => 422,
                'message' => '验证失败',
                'errors' => $validator->errors()
            ], 422)
        );
    }
}

10.3 自定义验证规则

// 在 AppServiceProvider 中注册自定义验证规则
// app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // 自定义验证规则:手机号
        Validator::extend('mobile', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/^1[3-9]\d{9}$/', $value);
        });
        
        // 自定义验证规则:身份证号
        Validator::extend('id_card', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/^\d{17}[\dXx]$/', $value);
        });
        
        // 自定义验证规则:密码强度
        Validator::extend('strong_password', function ($attribute, $value, $parameters, $validator) {
            return preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/', $value);
        });
    }
}

实例:验证

Laravel 代码示例

// app/Http/Requests/StoreUserRequest.php - 创建用户表单请求
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;

class StoreUserRequest extends FormRequest
{
    // 确定用户是否有权限进行此请求
    public function authorize(): bool
    {
        return true;
    }
    
    // 获取验证规则
    public function rules(): array
    {
        return [
            // 用户名规则
            'username' => 'required|string|alpha_num|min:4|max:20|unique:users',
            
            // 密码规则
            'password' => 'required|string|min:6|max:20|confirmed',
            'password_confirmation' => 'required|string|min:6|max:20',
            
            // 邮箱规则
            'email' => 'required|email|unique:users',
            
            // 手机号规则
            'mobile' => 'required|string|mobile|unique:users',
            
            // 年龄规则
            'age' => 'nullable|integer|between:18,60',
            
            // 性别规则
            'gender' => 'nullable|integer|in:0,1,2',
            
            // 状态规则
            'status' => 'nullable|boolean'
        ];
    }
    
    // 自定义错误消息
    public function messages(): array
    {
        return [
            'username.required' => '用户名不能为空',
            'username.alpha_num' => '用户名只能是字母和数字',
            'username.min' => '用户名至少4个字符',
            'username.max' => '用户名最多20个字符',
            'username.unique' => '用户名已存在',
            
            'password.required' => '密码不能为空',
            'password.min' => '密码至少6个字符',
            'password.max' => '密码最多20个字符',
            'password.confirmed' => '两次密码不一致',
            'password_confirmation.required' => '确认密码不能为空',
            
            'email.required' => '邮箱不能为空',
            'email.email' => '邮箱格式不正确',
            'email.unique' => '邮箱已存在',
            
            'mobile.required' => '手机号不能为空',
            'mobile.mobile' => '手机号格式不正确',
            'mobile.unique' => '手机号已存在',
            
            'age.integer' => '年龄必须是整数',
            'age.between' => '年龄必须在18-60之间',
            
            'gender.in' => '性别值不正确',
            
            'status.boolean' => '状态值不正确'
        ];
    }
    
    // 自定义验证属性名称
    public function attributes(): array
    {
        return [
            'username' => '用户名',
            'password' => '密码',
            'password_confirmation' => '确认密码',
            'email' => '邮箱',
            'mobile' => '手机号',
            'age' => '年龄',
            'gender' => '性别',
            'status' => '状态'
        ];
    }
    
    // 验证失败处理
    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(
            response()->json([
                'code' => 422,
                'message' => '验证失败',
                'errors' => $validator->errors()
            ], 422)
        );
    }
}

11. 综合实例

11.1 用户管理系统

Laravel 代码示例

// app/Http/Controllers/UserController.php - 用户控制器
namespace App\Http\Controllers;

use App\Models\User;
use App\Http\Requests\StoreUserRequest;
use App\Http\Requests\UpdateUserRequest;
use Illuminate\Http\Request;

class UserController extends Controller
{
    // 构造函数:应用中间件
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('can:manage-users')->except(['index', 'show']);
    }
    
    // 用户列表
    public function index(Request $request)
    {
        $page = $request->input('page', 1);
        $limit = $request->input('limit', 10);
        $keyword = $request->input('keyword', '');
        
        $query = User::query();
        
        if ($keyword) {
            $query->where('name', 'like', '%' . $keyword . '%')
                  ->orWhere('email', 'like', '%' . $keyword . '%');
        }
        
        $users = $query->orderBy('id', 'desc')
                       ->paginate($limit, ['*'], 'page', $page);
        
        return response()->json([
            'code' => 200,
            'message' => 'success',
            'data' => $users
        ]);
    }
    
    // 用户详情
    public function show($id)
    {
        $user = User::with(['posts', 'roles'])->findOrFail($id);
        
        return response()->json([
            'code' => 200,
            'message' => 'success',
            'data' => $user
        ]);
    }
    
    // 创建用户
    public function store(StoreUserRequest $request)
    {
        $validated = $request->validated();
        
        $validated['password'] = bcrypt($validated['password']);
        
        $user = User::create($validated);
        
        $user->assignRole('user');
        
        return response()->json([
            'code' => 201,
            'message' => '用户创建成功',
            'data' => $user
        ], 201);
    }
    
    // 更新用户
    public function update(UpdateUserRequest $request, $id)
    {
        $user = User::findOrFail($id);
        
        $validated = $request->validated();
        
        if (isset($validated['password'])) {
            $validated['password'] = bcrypt($validated['password']);
        }
        
        $user->update($validated);
        
        return response()->json([
            'code' => 200,
            'message' => '用户更新成功',
            'data' => $user
        ]);
    }
    
    // 删除用户
    public function destroy($id)
    {
        $user = User::findOrFail($id);
        
        $user->delete();
        
        return response()->json([
            'code' => 200,
            'message' => '用户删除成功'
        ]);
    }
}

12. 总结

本指南涵盖了 Laravel 的核心概念和技术,包括:

通过本指南的学习,您应该能够掌握 Laravel 的基本概念和核心特性,为后端开发打下坚实的基础。

Laravel 是一个功能强大且优雅的 PHP 框架,它通过优雅的语法、强大的 ORM、丰富的功能组件和完善的文档,帮助开发者快速构建高质量的 Web 应用。随着 Laravel 的不断发展,它已经成为全球最受欢迎的 PHP 框架之一。