CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Laravel 实战入门/课时/Laravel 概览
RawBlame
课时目录12 节

Laravel 实战入门

  1. 01Laravel 概览
  2. 02目录结构
  3. 03路由
  4. 04控制器
  5. 05Blade 模板
  6. 06Eloquent ORM
  7. 07认证与授权
  8. 08验证与异常
  9. 09队列与事件
  10. 10运维与工具
  11. 11测试
  12. 12综合练习

Laravel 概览

安装、Herd 与 Starter Kits。

30 分钟

Laravel 概览与环境搭建

这一课你将能做到

  1. 说清楚 Laravel 是什么、在一次 HTTP 请求中处于什么位置,并能与 Spring Boot 做对照
  2. 在本机用 Composer 或 Herd 创建一个可运行的 Laravel 11 项目并启动开发服务器
  3. 看懂 Laravel 11 的精简目录骨架,知道 Breeze / Jetstream / Livewire / Reverb 各自解决什么问题

为什么要学

如果你已经学过本站的 Spring Boot 路线,就会知道一个现代后端框架要解决的事情其实大同小异:路由、控制器、依赖注入、ORM、配置管理、认证、队列、缓存、测试。Laravel 是 PHP 生态里把这些事情整合得最完整的框架,被称为「PHP 界的 Rails」。它的价值不在于某一个单点功能,而在于约定优于配置带来的统一开发体验——团队里任何人拿到项目,目录结构、命名规则、扩展方式几乎一致。

人话版:Spring Boot 像一套标准化的工业流水线,严谨、显式、靠注解和容器把一切串起来;Laravel 像一条预装好了常用机具的工坊,门面(Facade)、助手函数、artisan 命令让你少写大量胶水代码。两者解决的是同一批问题,学 Laravel 反过来也会加深你对 Spring Boot 设计取舍的理解。

本课只解决一件事:让项目在你电脑上跑起来,并看懂它的轮廓。后续 11 课再逐个深入。

先建立图像

一次请求在两个框架中的旅程对照:

浏览器请求 GET /api/orders
        │
        ▼
┌──────────────────────── Laravel ────────────────────────┐
│ public/index.php  →  Kernel(中间件栈)                   │
│        → routes/*.php 路由匹配                             │
│        → Controller 方法(容器自动注入 Request)           │
│        → Eloquent 操作 MySQL / Cache 操作 Redis           │
│        → JsonResponse / Blade 视图                        │
└──────────────────────────────────────────────────────────┘

┌──────────────────── Spring Boot ────────────────────────┐
│ 内嵌 Tomcat → DispatcherServlet → Filter/Interceptor 链  │
│        → @RequestMapping 路由匹配                         │
│        → @RestController 方法(容器注入 HttpServletRequest)│
│        → MyBatis/JPA 操作 MySQL / RedisTemplate          │
│        → @ResponseBody JSON / Thymeleaf 视图              │
└──────────────────────────────────────────────────────────┘

关键对应关系:

LaravelSpring Boot作用
public/index.php + KernelDispatcherServlet请求统一入口
MiddlewareFilter / Interceptor横切处理(鉴权、CORS)
Service ContainerIoC Container依赖注入容器
EloquentJPA / MyBatis数据访问
Facade / 助手函数@Autowired Bean取用框架服务
artisanspring-boot-maven-plugin命令行脚手架
.env
application.yml + profile
环境配置

跟着做

步骤 1:准备 PHP 8.2+ 与 Composer

Laravel 11 要求 PHP 8.2 及以上。先确认版本(Windows 推荐用 Laravel Herd 一键安装 PHP + Nginx + Composer):

php -v
# PHP 8.3.x ...

composer -V
# Composer version 2.7.x

Herd 安装完成后会自动配好 php 和 composer 命令,并提供一个 *.test 的本地站点管理面板。Linux/macOS 用户可用包管理器安装 PHP 后再装 Composer:

# Ubuntu/Debian 示例:安装 Laravel 11 常用扩展
sudo apt install php8.3-cli php8.3-mbstring php8.3-xml php8.3-curl \
     php8.3-sqlite3 php8.3-mysql php8.3-redis php8.3-zip unzip

步骤 2:创建项目

Laravel 11 的安装器会交互式询问是否要默认搭载登录脚手架:

# 方式一:Composer 直接创建(最通用)
composer create-project laravel/laravel:^11.0 shop-api
cd shop-api

# 方式二:全局安装 Laravel 安装器
composer global require laravel/installer
laravel new shop-api

学习阶段数据库可以直接用 SQLite(Laravel 11 默认就是 SQLite,零配置):

# Laravel 11 已经在 database/ 下准备好 database.sqlite
php artisan migrate

这条命令会创建用户表、任务队列表、缓存表等基础表,说明 PHP 与数据库驱动都工作正常。

步骤 3:启动开发服务器

php artisan serve
# INFO  Server running on [http://127.0.0.1:8000]

浏览器访问 http://127.0.0.1:8000,看到 Laravel 的欢迎页即成功。这个内置服务器等价于 Spring Boot 的内嵌 Tomcat,仅用于开发,生产环境用 Nginx + PHP-FPM。

用另一个终端验证一条 API 路由(Laravel 11 默认带 /api/ping 之类的健康检查习惯,也可自己加):

curl -i http://127.0.0.1:8000/
# HTTP/1.1 200 OK ...

步骤 4:跑通一次「改代码 → 看效果」

打开 routes/web.php,把首页改成返回 JSON:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return response()->json([
        'service' => 'shop-api',
        'laravel' => app()->version(),
        'php'     => PHP_VERSION,
        'time'    => now()->toIso8601String(),
    ]);
});

再次 curl http://127.0.0.1:8000/,不需要重启服务(PHP 每次请求重新解释脚本),立刻能看到 JSON。这与 Spring Boot 改 Java 代码需要重启(除非用 DevTools 热加载)形成鲜明对比。

步骤 5:认识脚手架选项

如果项目需要登录注册页面,Laravel 11 推荐在创建项目时直接选 Starter Kit:

laravel new my-app
# Would you like to install a starter kit? [No starter kit]:
#   → Laravel Breeze(轻量:Blade 或 Inertia + Vue/React)
#   → Laravel Jetstream(重量:含团队管理、两步验证)
  • Breeze:一套最小可用的认证实现,代码直接发布到你项目里,适合初学者读懂每个环节。
  • Jetstream:在 Breeze 之上叠加团队、个人资料、2FA,适合 SaaS 起步。
  • Livewire:让纯 Blade 页面拥有响应式交互(不写 JavaScript 也能局部刷新),偏服务端渲染。
  • Reverb:Laravel 官方的 WebSocket 服务,对应 Spring 生态你可能用过的 STOMP/Netty 方案,用来做实时消息。

本课程前 11 课都基于「No starter kit」的纯净骨架,避免脚手架代码干扰理解。

讲清楚要点

  1. Laravel 11 是精简版骨架:与 10 及以前相比,app/ 下默认只有 Http/Controllers/Controller.php 一个文件,Kernel、Exception 处理等都被收拢进 bootstrap/app.php。这是刻意为之,不是缺文件。
  2. 一切环境差异走 .env:.env.example 是模板,复制成 .env;.env 不进 Git。这与 Spring Boot 用 application-{profile}.yml 的目的完全相同。
  3. APP_KEY 是加解密根基:创建项目时安装器会自动 php artisan key:generate。Cookie、会话、加密字段都依赖它,生产环境绝不能泄露或随意更换。
  4. artisan 是第一工具:php artisan list 能看到所有命令。常用:make:model、make:controller、migrate、route:list、queue:work、schedule:work、test。
  5. 配置缓存只在生产用:php artisan config:cache 会把 .env 合并进一份缓存提升性能;开发阶段不要开,否则改 .env 不生效。
  6. PHP 的请求模型与 JVM 不同:PHP-FPM 每个请求几乎从零启动框架(依赖随 OPcache 字节码缓存常驻,但对象状态不跨请求保留)。因此不要把业务状态存在静态属性里期望跨请求复用——这一点和 Spring 单例 Bean 长期驻留内存是本质区别。

你可能会懵的地方

  • Laravel 和 ThinkPHP、CodeIgniter 比有什么不同?为什么选它? 生态(Composer 包数量)、官方一等公民组件(Eloquent、Queue、Horizon、Echo、Reverb)、长期支持版本(LTS 节奏稳定)和就业市场占比。学框架本质是学它背后的生态,Laravel 在这几项上是 PHP 阵营最强的。

  • Facade 是不是在滥用静态方法?会不会像 Java 静态调用那样难以测试? 不是普通静态方法。Facade 只是服务容器里某个实例的静态代理,例如 Cache::get('x') 实际解析的是容器里的 cache 服务单例。测试时可以用 Cache::fake() 替换实现,Mock 成本很低。

  • Herd、Valet、Sail、Homestead 我该装哪个? Windows/macOS 本地学习用 Herd 最省心;macOS 老牌用户可能用 Valet;需要与团队统一 Docker 环境用 Laravel Sail(官方提供的 Docker Compose 套件);Homestead(Vagrant 虚拟机)已逐渐被前三者取代。

  • Breeze 和 Jetstream 会不会让我学不到原理? 恰恰相反,Breeze 会把控制器、路由、Blade 视图、表单请求发布到你的代码库里,是可以直接读的「标准答案」。建议先手动实现一遍认证(第 7 课会做),再回头读 Breeze。

  • Laravel 11 要求 PHP 8.2,我的服务器只有 8.1 怎么办? 两条路:升级 PHP(推荐,8.1 已进入安全更新末期),或使用 Laravel 10(支持 PHP 8.1,但本课程语法示例基于 11,目录差异需要自行对照)。

错法对照

错法问题正解
把 .env 提交进 Git数据库密码、APP_KEY 泄露仅提交 .env.example,.env 进 .gitignore
在代码里用 $_GET['id'] 取参数绕过框架,丢失验证与中间件用 $request->input('id') 或路由参数
在 routes/web.php 里写大段业务逻辑无法测试、无法复用逻辑放控制器或 Service 类
生产环境开启 APP_DEBUG=true报错页泄露堆栈、环境变量生产设为 false,日志看 storage/logs/laravel.log
Windows 直接改 vendor/ 内文件修 bugcomposer install 后全部丢失发 PR / fork 包 / 用容器绑定重写
手动新建 index.html 放到 public 里测试路由不会经过框架一律写路由 + 控制器

卡点急救

  1. composer create-project 卡在下载或报 SSL 错误:国内网络可切换阿里云 Composer 镜像 composer config -g repos.packagist composer https://mirrors.aliyun.com/composer/,再重试。
  2. 页面 500 且什么提示都没有:先看 .env 里 APP_DEBUG=true、APP_KEY 是否生成(没有就 php artisan key:generate),再看 storage/logs/laravel.log;同时确认 storage 和 bootstrap/cache 目录可写。
  3. php artisan migrate 报数据库连接失败:学习阶段最省事的方案是删掉 .env 里所有 DB_* 配置(Laravel 11 默认回落到 SQLite),并确认 database/database.sqlite 文件存在且 pdo_sqlite 扩展已启用。

面试常问

  • 介绍一下 Laravel 的请求生命周期。 所有请求由 public/index.php 进入,加载 Composer 自动加载器,创建应用实例(bootstrap/app.php),请求依次穿过全局中间件和路由组中间件,匹配到路由后由容器调用对应闭包或控制器方法,返回的 Response 再穿过中间件发回浏览器,最后结束请求。能讲出「入口文件 → Kernel/中间件 → 路由分发 → 控制器 → 响应」这一条线就算合格。

  • Facade、容器、契约(Contract)三者什么关系? 契约是接口(如 Illuminate\Contracts\Cache\Repository),容器负责把接口绑定到具体实现,Facade 用一个静态入口从容器解析实现。这正是「面向接口编程 + IoC」的 PHP 写法,与 Spring 中 interface CacheRepository + 容器注入 Bean 是同构的。

  • PHP 每次请求都重新启动框架,性能为什么还能接受? OPcache 把 PHP 脚本编译后的字节码缓存在共享内存中,避免重复编译;Laravel 启动阶段的大量对象创建确实有成本,生产上常见优化手段是 route:cache、config:cache、view:cache,并用 OPcache + opcache.preload,再配合 Redis/数据库连接池化。

自测三问

  1. 不看资料,说出从浏览器发出请求到控制器方法被调用,Laravel 经过了哪几个关键环节?
  2. .env、config/*.php、环境变量三者的读取优先级是怎样的?为什么开发环境不要执行 config:cache?
  3. Breeze、Jetstream、Livewire、Reverb 分别解决什么问题?什么场景选哪一个?

小结一句话

Laravel 把 Web 后端的通用设施打包进一个约定统一的框架里,装好 PHP 8.2、Composer,跑起 artisan serve 并看懂入口与脚手架选项,你就站在了后续所有课程的起点上。

延伸

  • Laravel 11 官方文档(英文)
  • Laravel 中文文档(社区维护)
  • Laravel Herd 下载
  • Composer 官方文档
  • 下一课:目录结构、配置与请求生命周期——我们会把今天看到的每一个目录拆开讲清楚,并对照 Spring Boot 项目布局。
加载本节练习…
下一课 →目录结构