Laravel 是什么:PHP 的工程化框架

PHP 早年是"一个 PHP 文件一段脚本",混着 HTML 和 SQL。Laravel 把它拉到现代 Web 工程的水准:目录结构分好、路由注册集中、数据库操作用 ORM、视图用模板引擎。你写的不再是零散脚本,而是一个有模有样的 MVC 工程。

Laravel 的口号是"开发者体验优先":常用的事情一条命令搞定,重复的事情框架替你做。它在 PHP 生态里是事实上的主流框架,做后台、CMS、中小企业 Web 系统都很常见。

Laravel 的本质:把 PHP 的灵活,套上一层有规矩的工程外壳——既保留 PHP 的快速迭代,又有大型框架的结构。
本文核心知识点
  • composerPHP 的包管理,装 Laravel 和依赖。
  • artisan命令行工具,起项目、建表、跑迁移都靠它。
  • 路由+控制器URL 在哪注册、请求交给哪个类处理。
  • EloquentORM,用 PHP 对象操作数据库,不用手写 SQL。
PHP Laravel 配图:蓝紫渐变背景上底部一个发光的基座方块,基座上分层堆叠多个发光的矩形层(四层从下到上渐窄),层与层之间用发光向上箭头连接,旁边有齿轮与盾牌装饰几何元素
基座上分层堆叠的矩形层——这正是 Laravel 的 MVC 分层:路由、控制器、模型、视图各居其位。

一条命令起项目:composer 与 artisan

装 Laravel 用 composer(PHP 的包管理器)。一行命令就能拉一个全新项目下来:

composer create-project laravel/laravel my-blog
cd my-blog
php artisan serve     # 起本地开发服务器

artisan 是 Laravel 自带的命令行工具,后面建控制器、建模型、跑迁移都靠它。项目骨架已经分好:app 写业务、routes 写路由、database 放迁移和种子、resources/views 放 Blade 模板。

路由与控制器:URL 怎么映射到代码

所有 URL 都在 routes/web.php 里注册。一个 URL 对应一个闭包或一个控制器方法。

// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index']);
Route::get('/posts/{id}', [PostController::class, 'show']);

控制器就是一个普通 PHP 类,方法接收请求、返回响应:

namespace App\Http\Controllers;
use App\Models\Post;

class PostController extends Controller {
    public function index() {
        $posts = Post::all();
        return view('posts.index', compact('posts'));
    }
}

URL 进来 → 路由匹配 → 控制器方法 → 拿数据 → 渲染视图。这就是 MVC 的标准流程。

Eloquent ORM:用对象操作数据库

Eloquent 是 Laravel 的 ORM:一张数据库表对应一个 PHP 模型类,表的一行就是模型的一个实例。你不用手写 SQL,用方法链就能查。

namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Post extends Model {
    // 对应 posts 表
}

// 用法
$post = Post::find(1);              // 查 id=1
$posts = Post::where('status', 1)
             ->orderBy('created_at','desc')
             ->get();               // 条件查

$p = new Post();
$p->title = '新文章';
$p->save();                          // 插入

从 Post::all() 到 $p->save(),你操作的是 PHP 对象,Eloquent 在背后翻译成 SQL。表字段变化?改模型和迁移就行,不用改业务代码。

迁移:把表结构当代码管

过去改表结构是手动进 phpMyAdmin 点。Laravel 用迁移(migration)把表结构写成 PHP 文件,跟着 git 走——团队每个人跑一遍 migrate,表就建好了。

php artisan make:migration create_posts_table

// 生成的迁移文件里
Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body');
    $table->timestamps();
});

php artisan migrate     // 真正建表

迁移的好处:表结构变更有版本、可回滚、团队一致。再也不会出现"我本地表和你不一样"的尴尬。

Blade 视图:服务端模板

视图用 Blade 模板写:在 HTML 里插 {{ }} 输出变量、@foreach 循环、@if 判断。它最后被编译成纯 PHP,性能不打折。

<!-- resources/views/posts/index.blade.php -->
<h1>文章列表</h1>
@foreach ($posts as $p)
  <article>
    <h2>{{ $p->title }}</h2>
    <p>{{ $p->created_at->format('Y-m-d') }}</p>
  </article>
@endforeach

控制器把 $posts 传进来,Blade 把它渲染成 HTML 发给浏览器。前后端在这一层握手。