jaydeep/laravel-preflight 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

jaydeep/laravel-preflight

Composer 安装命令:

composer require jaydeep/laravel-preflight

包简介

Artisan command that scans your Laravel codebase for breaking changes and compatibility issues before you upgrade to Laravel 9, 10, 11, 12, or 13.

README 文档

README

Latest Version Total Downloads PHP Laravel License

The fastest way to find every breaking change before you upgrade Laravel.

One Artisan command scans your entire codebase and reports only the upgrade issues that actually exist in your project — across PHP files, composer.json, config files, and .env. Supports upgrading from Laravel 8 through 13 with 70+ checks covering every major breaking change.

Why Laravel Preflight?

The official Laravel upgrade guide lists every possible breaking change — but most of them won't affect your app. Reading through the full guide, manually searching your code, and checking config keys wastes hours.

This tool does it in seconds:

  • Zero false positives — only flags issues found in your actual code
  • Multi-version support — checking Laravel 8 → 13 covers all 5 intermediate upgrade paths in one run
  • Actionable fixes — every issue includes the exact fix command or change needed
  • No code modifications — read-only scan, safe to run any time
  • CI/CD ready — exits with code 1 when blocking issues exist, 0 when clean

Installation

composer require jaydeep/laravel-preflight

Auto-discovered. No service provider registration needed.

Quick Start

# Scan for breaking changes before upgrading to Laravel 13
php artisan upgrade:check 13

# Scan for a specific target version
php artisan upgrade:check 11

# Generate a full HTML + Markdown report
php artisan upgrade:check 13 --report

The command auto-detects your current Laravel version from composer.json. Multi-version upgrades are fully supported — scanning from Laravel 8 to 13 covers all intermediate breaking changes in a single run.

Screenshots

Console Output

Console output showing upgrade compatibility report

HTML Report

HTML report opened in browser

How It Works

1. Detect — Reads your composer.json to determine the current Laravel version and the target you specify.

2. Scan — Runs four analyzers across your codebase:

Analyzer Scans Checks
ComposerAnalyzer composer.json Deprecated, removed, or replaced packages
CodeAnalyzer app/, routes/, config/, database/, resources/, tests/ Regex pattern search across all .php files
ConfigAnalyzer config/*.php Missing or renamed config keys
EnvAnalyzer .env.example / .env New required environment variables

3. Report — Prints a grouped, colour-coded console report. Use --report to also write storage/upgrade-report.md and storage/upgrade-report.html.

Supported Upgrade Paths

Target From Key Breaking Changes Checked
Laravel 9 Laravel 8 PHP 8.0 required, SwiftMailer removed, fruitcake/laravel-cors deprecated, facade/ignition replaced, $dates property deprecated, Flysystem 3.x, dispatch_now() removed, mail config default key
Laravel 10 Laravel 9 PHP 8.1 required, Bus::dispatchNow() removed, assertDeleted() removed, $dates fully removed, Predis 2.x required, native return types enforced, getQueueableRelations() return type
Laravel 11 Laravel 10 PHP 8.2 required, slim skeleton (Http/Kernel.php removed, Console/Kernel.php removed), service providers consolidated, routes/api.php not auto-loaded, routes/channels.php not auto-loaded, Carbon 3.x
Laravel 12 Laravel 11 doctrine/dbal dropped, Model::reguard() removed, Response::json() throws on invalid JSON, Collection::groupBy() key preservation, whereRelation() signature, Str::password() removed, spatie/laravel-ignition ^2.0
Laravel 13 Laravel 12 VerifyCsrfTokenPreventRequestForgery, cache serializable_classes, DB::upsert() validation, cache key prefix format, polymorphic pivot names, JobAttempted event property, array_first()/array_last() conflicts

Example Output

  Laravel Preflight  by Jaydeep
  ─────────────────────────────────────────

  Current Laravel: v8
  Target  Laravel: v13

  Scanning codebase...

  ┌─────────────────────────────────────────────┐
  │          UPGRADE COMPATIBILITY REPORT        │
  └─────────────────────────────────────────────┘

   CRITICAL  7   WARNING 8   INFO 5   Passed 54

  ── COMPOSER

  [CRITICAL] fruitcake/laravel-cors deprecated
         The fruitcake/laravel-cors package is superseded by Laravel's built-in CORS support.
           → composer.json
         Fix: Remove fruitcake/laravel-cors. Use the built-in config/cors.php.

  ── CODE

  [WARNING] Model $dates property deprecated
         The $dates property on Eloquent models is deprecated in L9, removed in L10.
           → app/Models/Post.php
         Fix: Replace protected $dates = [...] with protected $casts = ['field' => 'datetime'].

  ── MIDDLEWARE

  [CRITICAL] VerifyCsrfToken renamed to PreventRequestForgery
         The CSRF middleware class was renamed and now includes request-origin verification.
           → app/Http/Kernel.php
         Fix: Replace VerifyCsrfToken::class with PreventRequestForgery::class.

  54 check(s) passed (no issues found for those).

  Run with --report to save a full Markdown + HTML report:
  php artisan upgrade:check --report

Report Files

Add --report to generate both a Markdown and a self-contained HTML report:

php artisan upgrade:check 13 --report
File Description
storage/upgrade-report.md Markdown — commit to your repo or share in a PR
storage/upgrade-report.html Interactive HTML — severity filters, collapsible cards, one-click copy for fix commands, animated readiness score

Severity Levels

Level Meaning
CRITICAL Will break your application — must fix before upgrading
WARNING Likely to cause bugs or unexpected behaviour — review required
INFO Behavioural change to be aware of — may or may not affect your app

CI / CD Integration

The command exits with code 1 when any issues are detected, and 0 when the codebase is clean — making it easy to gate deployments or upgrade PRs in any CI pipeline.

# GitHub Actions example
- name: Check Laravel upgrade compatibility
  run: php artisan upgrade:check 13
# Fail a build if not ready to upgrade
php artisan upgrade:check 13 || exit 1

Extending: Adding a New Laravel Version

  1. Create src/VersionRegistry/Laravel{N}Upgrade.php extending BaseUpgrade
  2. Implement getBreakingChanges() returning an array of BreakingChange objects
  3. Register it in VersionRegistry::$upgrades and bump $latestVersion

Each breaking change supports four detection strategies:

Property Detected By Example
$searchPattern CodeAnalyzer — regex over PHP files '/VerifyCsrfToken/'
$composerPackage ComposerAnalyzer — checks composer.json 'facade/ignition'
$configKey ConfigAnalyzer — checks config/{file}.php 'cache.serializable_classes'
$envKey EnvAnalyzer — checks .env.example 'CACHE_PREFIX'
// Example: adding a breaking change
$this->change(
    'VerifyCsrfToken renamed to PreventRequestForgery',    // title
    'The CSRF middleware class was renamed in Laravel 13.', // description
    'critical',                                             // severity
    'middleware',                                           // category
    'Replace VerifyCsrfToken::class with PreventRequestForgery::class.', // fix
    '/VerifyCsrfToken/'                                     // searchPattern
);

Architecture

src/
├── UpgradeAssistantServiceProvider.php   Auto-discovered service provider
├── Commands/
│   └── UpgradeCheckCommand.php           php artisan upgrade:check
├── Analyzers/
│   ├── BaseAnalyzer.php
│   ├── ComposerAnalyzer.php              Scans composer.json
│   ├── CodeAnalyzer.php                  Regex scans PHP files
│   ├── ConfigAnalyzer.php                Checks config/ keys
│   └── EnvAnalyzer.php                   Checks .env.example keys
├── Data/
│   └── BreakingChange.php                Value object for a single issue
├── VersionRegistry/
│   ├── VersionRegistry.php               Maps version numbers to upgrade classes
│   ├── BaseUpgrade.php
│   ├── Laravel9Upgrade.php               L8 → L9 breaking changes
│   ├── Laravel10Upgrade.php              L9 → L10 breaking changes
│   ├── Laravel11Upgrade.php              L10 → L11 breaking changes
│   ├── Laravel12Upgrade.php              L11 → L12 breaking changes
│   └── Laravel13Upgrade.php              L12 → L13 breaking changes
└── Report/
    └── ReportGenerator.php               Console + Markdown + HTML report

Requirements

Version
PHP ^7.4 | ^8.0
Laravel ^8.0 through ^13.0

FAQ

Does it modify any files? No. The scan is entirely read-only. Nothing in your project is changed.

Can I run it on a project that is already on a newer version? Yes — the command detects your current version and skips checks that don't apply. If you're already on the target version it exits immediately.

How is it different from Rector or Laravel Shift? Rector and Shift modify your code. This tool only reports — it tells you what needs to change and where, so you can make the changes yourself with full control.

Can I use it in a pre-upgrade CI check? Yes. It returns exit code 1 when issues are found. Add it to your CI pipeline to block merges until the codebase is compatible with the target version.

What if a check fires but doesn't apply to my app? The results are informational. Review the listed file paths and decide whether the fix applies to your specific usage.

Contributing

Contributions are welcome — especially new breaking change definitions for existing or future Laravel versions.

  1. Fork the repository
  2. Add your breaking changes to the relevant Laravel{N}Upgrade.php file
  3. Test by running php artisan upgrade:check against a project that uses the pattern
  4. Open a pull request with a brief description of the breaking change and a link to the official Laravel upgrade guide

Related Packages

License

MIT — Jaydeep Gadhiya

jaydeep/laravel-preflight 适用场景与选型建议

jaydeep/laravel-preflight 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 365 次下载、GitHub Stars 达 5, 最近一次更新时间为 2026 年 06 月 09 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「laravel」 「compatibility」 「artisan」 「upgrade」 「static-analysis」 「preflight」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 jaydeep/laravel-preflight 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 jaydeep/laravel-preflight 我们能提供哪些服务?
定制开发 / 二次开发

基于 jaydeep/laravel-preflight 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 365
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 49
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 5
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-09