必须先升到 php 8.3+,否则 composer update 会直接失败——laravel 13 强制要求 php 8.3 或更高版本,不兼容更低版本,且不再接受任何 polyfill 兼容降级;运行 php -v 必须显示 8.3.x 或 8.4.x,扩展如 openssl、mbstring、xml 等须全部启用,composer.json 需同步更新 "php": "^8.3" 和 "laravel/framework": "^13.0" 等关键依赖,并执行 composer update "laravel/framework" "laravel/sail" --with-all-dependencies。

必须先升到 PHP 8.3+,否则 composer update 会直接失败——Laravel 13 不兼容更低版本,硬升必卡在依赖解析阶段。
确认当前环境是否满足 Laravel 13 硬性要求
Laravel 13 强制要求 PHP 8.3 或更高版本,且不再接受任何 polyfill 兼容降级。你不能靠改 composer.json 蒙混过关。
- 运行
php -v,输出必须是PHP 8.3.x(如8.3.12)或8.4.x;若显示8.2.20或更低,升级 PHP 是前置动作,不是可选项 - macOS 上推荐用
brew install php@8.3(Homebrew 官方源已同步),装完执行brew link --force php@8.3切换默认 PHP - 验证 CLI 和 Web SAPI 是否一致:分别运行
php -v和php -r "echo PHP_VERSION;",二者版本号必须完全相同;常见坑是 MAMP/XAMPP 或 Valet 仍指向旧 PHP - 检查
openssl、mbstring、xml、ctype、json等扩展是否启用——Laravel 13 启动时会校验,缺失任一即报Class 'Illuminate\Foundation\Application' not found
修改 composer.json 并执行精准更新
只改 "laravel/framework": "^13.0" 会导致大量 Class not found 错误,因为配套生态包版本不匹配。
- 打开
composer.json,批量更新以下关键项(以 Laravel 13.2.0 为准):"php": "^8.3"、"laravel/framework": "^13.0"、"laravel/sail": "^2.0"、"laravel/pint": "^1.17"、"nunomaduro/collision": "^8.5"、"spatie/laravel-ignition": "^2.9" - 删除
"phpunit/phpunit"行(Laravel 13 默认用 Pest,若坚持用 PHPUnit 需手动composer require phpunit/phpunit:^11.0 --dev) - 运行
composer update "laravel/framework" "laravel/sail" --with-all-dependencies;加--with-all-dependencies是为了强制刷新子依赖,避免doctrine/dbal卡在 v3.x 导致迁移失败 - 若提示
Root composer.json requires laravel/framework ^13.0, found laravel/framework[v13.0.0, ..., v13.2.0] but these were not loaded,说明本地 Composer 缓存污染,先执行composer clear-cache再重试
处理 Laravel 13 特有结构变更
升级后 php artisan serve 启动失败,大概率是骨架级变动没适配,不是代码逻辑问题。
-
app/Providers/AppServiceProvider.php中的register()方法已被彻底移除——所有服务绑定必须移到boot()或单独的服务容器文件(如app/Providers/ContainerServiceProvider.php) -
config/app.php里废弃的'providers'数组项(如Illuminate\Redis\RedisServiceProvider::class)必须删掉,否则启动时报Target class [redis] does not exist - 模型工厂全部转为闭包写法:
database/factories/UserFactory.php必须从class UserFactory extends Factory改成use function Illuminate\Database\Eloquent\Factories\withAttributes;+ 闭包返回,旧类定义会触发Class "UserFactory" not found -
app/Http/Kernel.php中$middlewareGroups['web']默认不再包含\App\Http\Middleware\EncryptCookies::class,若你的登录态依赖 Cookie 加密,需手动加回,否则 session 无法持久化
验证 Attributes 语法与 AI SDK 可用性
Laravel 13 的 Attributes 是可选但推荐启用的特性,不配置不会报错,但会错过核心体验优化。
- 新建模型测试原生 Attributes:
#[Table('users')]<br>#[Hidden(['password'])]<br>#[Fillable(['name', 'email'])]<br>class User extends Model {}若报AttributeNotFoundException,说明 PHP 8.3 的 Attributes 扩展未启用(检查php.ini中是否含extension=phar和extension=tokenizer) - 运行
php artisan ai:install初始化 Laravel AI SDK;若提示Command "ai:install" is not defined,说明laravel/framework未真正升级成功,回到上一步检查vendor/laravel/framework/src/Illuminate/Foundation/Console目录是否存在AiInstallCommand.php - 执行
php artisan test前,务必先php artisan config:clear && php artisan cache:clear && composer dump-autoload,Laravel 13 对自动加载顺序更敏感,缓存残留极易导致Target class does not exist
最易被忽略的是 PHP SAPI 版本一致性——CLI 用的是 8.3,但 Nginx/Apache 调用的仍是旧 PHP,导致 artisan serve 正常而网页访问 500;务必用 phpinfo() 页面确认 Web 环境真实版本。











