PHP: 下一步:Laravel引路
恭喜你完成了 35 课 PHP 基础教程!你手写了路由器、控制器、视图、模型——这不就是一个小框架吗?Laravel 把这些做得优雅 10 倍。这节课是你从手写 PHP 到现代框架的桥梁。
1. 为什么需要框架?
你用 PHP 写的博客系统已经遇到这些问题了:
| 你的痛点 | 框架解决方案 |
|---|---|
| URL 重写.htaccess 麻烦 | Laravel 内置路由 Route::get('/posts', ...) |
| 每个页面都要 session_start + 验证 | 中间件 ->middleware('auth') |
| SQL 手写容易错、切换数据库难 | Eloquent ORM Post::all() |
| 手动 require 所有文件 | Composer 自动加载 |
| 表单 CSRF 保护自己写 | @csrf 一行搞定 |
| 手动改来改去的数据库 | Migrations 版本管理 |
| 密码哈希重复代码 | Hash::make(), Auth::attempt() |
💡 提示: 框架不是更复杂的 PHP——它是更组织化的 PHP。你手写过的每一个功能,在 Laravel 里都有更简洁的写法。
2. Laravel 安装
BASH
# 创建新项目
composer create-project laravel/laravel myblog
# 启动开发服务器
cd myblog
php artisan serve
# 打开 http://localhost:8000
TEXT
📖 仅展示
myblog/ ← Laravel 项目
├── app/
│ ├── Models/ ← Eloquent 模型
│ │ └── Post.php
│ └── Http/
│ └── Controllers/ ← 控制器
│ └── PostController.php
├── routes/
│ └── web.php ← 路由(核心!)
├── resources/
│ └── views/ ← Blade 模板
│ └── posts/
├── database/
│ └── migrations/ ← 数据库迁移
├── .env ← 环境配置
└── artisan ← 命令行工具
3. 路由——你手写的 Router vs Laravel
(1) 你手写的:
PHP
$router->add('GET', '/posts', [$ctrl, 'index']);
$router->add('GET', '/posts/{id}', [$ctrl, 'show']);
(2) Laravel 的:
PHP
// routes/web.php
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);
// 更简洁:资源路由(一行生成 7 个标准路由)
Route::resource('posts', PostController::class);
// 查看所有路由
// php artisan route:list
4. Eloquent ORM——你手写的 Model vs Laravel
(1) 你手写的:
PHP
// 30 行 CRUD 代码
public function getAll(): array { ... }
public function findById(int $id): ?array { ... }
public function create(...): int { ... }
(2) Laravel 的:
PHP
<?php
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// 就这一行!Laravel 自动映射到 posts 表
protected $fillable = ['title', 'content', 'user_id'];
// 关联用户
public function user()
{
return $this->belongsTo(User::class);
}
}
// 使用(10行手写代码 → 1行)
$posts = Post::all();
$post = Post::find(1);
Post::create(['title' => '你好', 'content' => '世界', 'user_id' => 1]);
$post->update(['title' => '新的标题']);
$post->delete();
// 关联查询
echo $post->user->username; // 自动 JOIN users 表
?>
5. Blade 模板——你手写的 PHP View vs Blade
(1) 你手写的:
PHP
<?php foreach ($posts as $post): ?>
<h2><?= htmlspecialchars($post['title']) ?></h2>
<?php endforeach; ?>
▶ 示例:Blade 文章列表模板
BLADE
{{-- resources/views/posts/index.blade.php --}}
@extends('layouts.app')
@section('content')
<h2>文章列表</h2>
@foreach ($posts as $post)
<div class="post-card">
<h2><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></h2>
<p>{{ Str::limit($post->content, 200) }}</p>
</div>
@endforeach
{{-- 分页链接自动生成!--}}
{{ $posts->links() }}
@endsection
Blade 特性:
{{ $var }}自动htmlspecialchars(防 XSS)@if @else @endif/@foreach @endforeach更简洁@extends/@section模板继承@csrf自动生成 CSRF Token 隐藏字段
6. Migrations——管理数据库结构
不再手动执行 SQL 建表,用代码定义表结构:
BASH
# 创建迁移文件
php artisan make:migration create_posts_table
# 执行迁移
php artisan migrate
# 回滚
php artisan migrate:rollback
PHP
<?php
// database/migrations/xxx_create_posts_table.php
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->string('title');
$table->text('content');
$table->timestamps(); // created_at + updated_at 自动管理
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
💡 提示: Migration 的好处:(1) 版本管理——像 Git 一样
php artisan migrate:rollback 回退;(2) 团队协作——所有人执行相同迁移得到相同表结构;(3) 自动处理字段名/类型/索引/外键。
7. 认证系统——手写 50 行 vs Laravel 3 行
(1) 你手写的:
PHP
// 验证密码 + Session 管理 + 退出登录 + 权限检查 = ~50 行
(2) Laravel 的:
BASH
# 一键生成完整认证系统(登录/注册/密码重置/邮箱验证)
composer require laravel/breeze
php artisan breeze:install blade
php artisan migrate
npm install && npm run build
PHP
// 路由保护
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth');
// 获取当前用户
$user = auth()->user();
echo $user->posts; // 自动关联查询
8. Artisan——你的 CLI 工具箱
BASH
# 创建控制器
php artisan make:controller PostController
# 创建模型(同时生成 Migration/Factory/Seeder)
php artisan make:model Post -a
# 数据库操作
php artisan migrate # 执行迁移
php artisan db:seed # 填充测试数据
php artisan migrate:fresh --seed # 重置数据库 + 填充
# 调试
php artisan route:list # 查看所有路由
php artisan tinker # 交互式 PHP REPL(可直接操作数据库)
9. Laravel 博客系统——完整版
▶ 示例:完整 Laravel 控制器
PHP
<?php
// routes/web.php
use App\Http\Controllers\PostController;
Route::get('/', [PostController::class, 'index']);
Route::resource('posts', PostController::class)->middleware('auth');
Route::get('/register', [RegisteredUserController::class, 'create']);
Route::post('/register', [RegisteredUserController::class, 'store']);
PHP
<?php
// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
$posts = Post::with('user')->latest()->paginate(10);
return view('posts.index', compact('posts'));
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|max:200',
'content' => 'required',
]);
Post::create([
...$validated,
'user_id' => auth()->id(),
]);
return redirect('/posts')->with('success', '文章发布成功!');
}
}
比较一下: 你手写的博客用了 ~150 行 PostController,Laravel 用了 ~20 行 —— 而且 Laravel 版自带防 SQL 注入、CSRF 保护、表单验证、分页。
10. 你的 PHP 学习路线图
TEXT
📖 仅展示
✅ 你已经完成:
基础语法(变量/数组/函数/循环/条件)
↓
Web 交互(表单/Cookie/Session/文件上传) ← 36 课完成
↓
OOP(类/继承/接口/Trait/命名空间/Composer)
↓
数据库操作(MySQL/PDO/事务/安全)
↓
PHP 8 现代特性(枚举/match/构造函数提升)
↓
🔜 你的下一步:
1. 用 Laravel 重写博客系统(本周)
— 理解框架思想,体验效率飞跃
2. 学 REST API 开发
— JSON 接口返回,前后端分离
3. 了解测试(PHPUnit/Pest)
— 让代码被自动测试保护
4. 深入研究:
— Laravel 生态(Eloquent/Queues/Events/Notifications)
— 设计模式(Repository/Service/Factory)
— 性能优化(Redis缓存/N+1查询/Opcache)
❓ 常见问题
Q 学完 PHP 基础必须立刻学 Laravel 吗?
A 不用焦虑。你已经理解了 MVC 是怎么工作的(因为你手写过)。这时学 Laravel 你会有"啊!原来这么简单"的顿悟。如果跳过手写直接学框架,很多底层原理就模糊了。
Q PHP 市场还有前途吗?
A WordPress 占全球 43% 网站,Laravel 是最受欢迎的 Web 框架之一。巴西、中东大量 PHP 岗位。PHP 8.x 每年发布新版本,速度快、类型系统完善、生态成熟。PHP 很活跃。
Q 下一个语言学什么?
A 你已经会 PHP(后端)+ HTML/CSS/JS(前端),你已经是一个全栈开发者了!深化方向:SQL 数据库(JOIN/索引/优化)→ 服务器管理(Nginx/Linux/Docker)→ 进阶 JavaScript(React/Vue)。
📖 小节
- 框架不增加复杂度,是组织已有能力
- Laravel:
Route::get()路由 →EloquentORM →Blade模板 →ArtisanCLI Post::all()替代手写SELECT * FROM posts@foreach替代<?php foreach ?>php artisan命令行生成器提升效率- 你已经掌握了 MVC 核心——Laravel 只是把 MVC 做得更优雅
- Laravel 文档:https://laravel.com/docs
- Laravel 中文文档:https://learnku.com/docs/laravel
📝 作业
- 安装 Laravel,创建新项目,跑通
php artisan serve看到欢迎页。 - 用
php artisan make:model Post -a创建完整的文章资源,编写 Migration 建表,用 Tinker 插入几条测试数据。 - 用 Laravel 重写你博客系统的文章列表页和文章详情页(Blade 模板 + Eloquent 查询),对比手写版体验不同。
🎉 恭喜你完成了 36 课 PHP 教程! 你从一个连
echo都不会写的新手,变成了能用 PHP 构建完整 Web 应用、理解 MVC 架构、掌握数据库操作和安全的开发者。PHP 的世界很大——WordPress、Laravel、Drupal、Symfony 都在等着你。加油!🚀