Composer 安装与新版骨架解析
Laravel 11 彻底精简了骨架结构——原来 Laravel 8/9 里密密麻麻的 app/Http/Kernel.php、app/Providers/ 目录里的 5 个文件,在 Laravel 11 中被大幅合并和隐藏。如果你按旧教程的目录结构找文件,你会发现很多都找不到了。本节从安装开始,把新旧差异讲清楚。
环境要求
| 组件 | 最低版本 | 推荐 |
|---|---|---|
| PHP | 8.2 | 8.3 |
| Composer | 2.x | 2.7+ |
| Node.js | 20.x(可选,前端资产编译用) | 22 LTS |
| 数据库 | PostgreSQL 15+ / MySQL 8.0+ | PostgreSQL 16 |
# 验证环境
php --version # PHP 8.3.x
composer --version # Composer 2.7.x
# 安装 Laravel Installer(推荐)
composer global require laravel/installer
# 或者用 Composer create-project
composer create-project laravel/laravel taskflow
# 用 Laravel Installer(更快)
laravel new taskflow
# 会交互式询问:
# - Starter kit? None(我们手动配置)
# - Database? PostgreSQL
# - Run migrations? Yes
Laravel 11 骨架:新旧对比
Laravel 10 骨架(旧): Laravel 11 骨架(新):
app/
├── Console/ app/
│ └── Kernel.php ───→ ├── Console/ ← 消失了!
├── Exceptions/ ├── Exceptions/
│ └── Handler.php ───→ │ └── Handler.php ← 大幅精简
├── Http/
│ ├── Controllers/ ├── Http/
│ ├── Kernel.php ───→ │ ├── Controllers/
│ └── Middleware/ ───→ │ └── Middleware/ ← 只剩自定义的
├── Models/ ├── Models/
└── Providers/ └── Providers/
├── AppServiceProvider.php ──→ └── AppServiceProvider.php ← 只剩这一个
├── AuthServiceProvider.php ───→ (其他 Provider 消失了)
├── BroadcastServiceProvider.php
├── EventServiceProvider.php
└── RouteServiceProvider.php
bootstrap/
└── app.php ──→ bootstrap/app.php ← 这是新的"核心配置"
routes/
├── web.php routes/
├── api.php ──→ ├── web.php
├── channels.php └── console.php ← api.php 默认不存在
└── console.php (按需创建 api.php / channels.php)
bootstrap/app.php:新的核心配置
Laravel 11 把原来分散在 Kernel.php、各种 ServiceProvider 中的配置,统一收纳到 bootstrap/app.php:
<?php
// bootstrap/app.php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php', // 需要时手动添加
commands: __DIR__.'/../routes/console.php',
channels: __DIR__.'/../routes/channels.php', // Broadcasting 时添加
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
// 全局中间件配置(原来在 Kernel.php)
$middleware->web(append: [
\App\Http\Middleware\HandleInertiaRequests::class, // 按需添加
]);
// API 中间件组
$middleware->api(prepend: [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
]);
// 中间件别名(原来在 Kernel.php $routeMiddleware)
$middleware->alias([
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
// 异常处理(原来在 Handler.php 的 register() 方法)
$exceptions->report(function (\App\Exceptions\PaymentException $e) {
logger()->critical('Payment failed', ['error' => $e->getMessage()]);
});
$exceptions->render(function (\App\Exceptions\PaymentException $e) {
return response()->json(['error' => $e->getMessage()], 422);
});
})->create();
目录结构详解
taskflow/
├── app/
│ ├── Http/
│ │ ├── Controllers/ ← 控制器
│ │ └── Middleware/ ← 自定义中间件
│ ├── Models/ ← Eloquent 模型
│ ├── Providers/
│ │ └── AppServiceProvider.php ← 服务绑定、宏定义
│ └── (你自己建的目录:Services/, Actions/, DTOs/ 等)
├── bootstrap/
│ ├── app.php ← 应用核心配置(Laravel 11 新增)
│ └── cache/ ← 启动缓存(不要手动修改)
├── config/ ← 各模块配置文件
│ ├── app.php
│ ├── database.php
│ ├── queue.php
│ └── ...
├── database/
│ ├── factories/ ← 测试数据工厂
│ ├── migrations/ ← 数据库迁移
│ └── seeders/ ← 数据填充
├── public/ ← Web 根目录(Nginx 指向这里)
│ └── index.php ← 入口文件
├── resources/
│ ├── views/ ← Blade 模板
│ └── js/ css/ ← 前端资产
├── routes/
│ ├── web.php ← Web 路由
│ └── console.php ← Artisan 命令定义
├── storage/ ← 日志、缓存、上传文件
├── tests/
│ ├── Feature/ ← 集成测试
│ └── Unit/ ← 单元测试
├── .env ← 环境变量(不提交到 Git)
├── .env.example ← 环境变量模板(提交到 Git)
├── artisan ← CLI 入口
└── composer.json
第一个 Artisan 命令
# 查看所有可用命令
php artisan list
# 启动开发服务器(PHP built-in server)
php artisan serve
# → http://localhost:8000
# 生成应用密钥(安装后必须执行)
php artisan key:generate
# 数据库迁移
php artisan migrate
# 清空所有缓存(开发时常用)
php artisan optimize:clear
# 查看路由列表
php artisan route:list
php artisan route:list --path=api # 只看 /api 路由
TaskFlow 项目初始化
# 创建项目
laravel new taskflow
# 配置 .env
cd taskflow
cp .env.example .env
# 编辑 .env(数据库配置)
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=taskflow
DB_USERNAME=postgres
DB_PASSWORD=your_password
# 创建数据库(PostgreSQL)
psql -U postgres -c "CREATE DATABASE taskflow;"
# 运行迁移(包含默认的 users 表等)
php artisan migrate
# 验证
php artisan serve
# 访问 http://localhost:8000 看到 Laravel 欢迎页 ✅
下一节:服务容器与服务提供者——Laravel 的核心是 IoC 容器,理解它才能真正理解为什么
new Controller()可以自动注入依赖,以及如何绑定自定义服务。