ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Krayin CRM v2.2 升级指南:从 v2.1 平滑迁移至 Laravel 12 的完整实践

Krayin CRM v2.2 升级指南:从 v2.1 平滑迁移至 Laravel 12 的完整实践 后端前端企业应用【免费下载链接】laravel-crmKrayin CRM is Free Open Source CRM Built with Laravel for Customer, Lead, and Sales Management.项目地址https://gitcode.com/GitHub_Trending/la/laravel-crm点击查看免费下载Krayin CRM 在 v2.2 版本中完成了从 Laravel 11 到 Laravel 12 的底层框架升级同时将运行时要求提升到 PHP 8.3。本文以仓库根目录的 UPGRADE.md 为主线结合当前仓库bootstrap/app.php、bootstrap/providers.php、composer.json 等真实源码系统讲解 v2.1 → v2.2 的每一项破坏性变更、影响概率以及升级后自定义中间件、异常处理、服务提供者的新写法。读完本文你将掌握 Laravel 12 新应用结构在 Krayin CRM 中的落地方式并能据此完成一次低风险的版本升级。说明Krayin 官方致力于记录每一个潜在破坏性变更但部分变更发生在 Krayin 的冷门模块中实际升级时可能只有少数几项会真正影响你的应用。建议按本文的影响概率分级评估自己的项目。升级目标与影响概览本次升级的核心是两个高影响项PHP 8.3 Required影响概率高Krayin CRM v2.2 要求 PHP 8.3 或更高版本。Laravel 12 Upgrade影响概率高Krayin CRM v2.2 全面升级到 Laravel 12引入更严格的类型检查stricter type checking和现代化的日期/时间处理modernized date/time handling。从仓库的 composer.json 可以验证上述要求已经落实require: { php: ^8.3, laravel/framework: ^12.0, laravel/sanctum: ^4.0, ... }其中php: ^8.3意味着低于 8.3 的 PHP 环境将无法执行composer installlaravel/framework: ^12.0则将框架锁定在 Laravel 12 主版本。升级前请先确认部署环境的 PHP 版本并在本地以 PHP 8.3 跑通composer update。更新依赖升级前的第一步升级第一步永远是更新依赖。在确保 PHP ≥ 8.3 的前提下执行composer update随后核对依赖解析结果重点确认laravel/framework落在12.x、laravel/sanctum落在4.x。升级完成后可运行以下命令做健康检查php artisan --version # 应输出 Laravel Framework 12.x php artisan migrate # 确认数据库迁移可正常执行 php artisan optimize # 重建配置、路由、事件等缓存Laravel 12 升级五大关键变更详解1. Bootstrap新的Application::configure()构建器模式影响概率高Laravel 12 引入了全新的应用引导方式。Krayin CRM v2.2 的 bootstrap/app.php 已全面切换到Application::configure()构建器模式路由、中间件、异常处理全部在这一处集中声明?php use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful; use Webkul\Installer\Http\Middleware\CanInstall; 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, health: /up, ) -withMiddleware(function (Middleware $middleware) { $middleware-append(CanInstall::class); $middleware-encryptCookies(except: [ dark_mode, sidebar_collapsed, ]); $middleware-validateCsrfTokens(except: [ admin/mail/inbound-parse, admin/web-forms/forms/*, ]); $middleware-api(prepend: [ EnsureFrontendRequestsAreStateful::class, ]); }) -withExceptions(function (Exceptions $exceptions) { // })-create();从这段真实代码可以看出 Krayin 在升级后的几个具体落地细节withRouting()同时声明了web、api、commands、channels四条路由文件并设置了健康检查端点/upwithMiddleware()中通过append()追加了安装器中间件CanInstall来自Webkul\Installer包对 Cookie 加密与 CSRF 校验做了针对性豁免dark_mode、sidebar_collapsed两个 Cookie 不加密admin/mail/inbound-parse与admin/web-forms/forms/*两组 URI 跳过 CSRF 校验——这正是 Krayin 收件箱拉取与 Web Form 表单提交得以工作的前提API 中间件组前置插入了 Sanctum 的EnsureFrontendRequestsAreStateful保证有状态 API 请求可正常鉴权。2. 服务提供者清单独立为bootstrap/providers.php影响概率高服务提供者不再在config/app.php的providers数组中注册而是集中列在 bootstrap/providers.php。当前仓库中该文件按Package / Application / Webkul三段式组织共注册了 20 个提供者use App\Providers\AppServiceProvider; use Barryvdh\DomPDF\ServiceProvider; use Konekt\Concord\ConcordServiceProvider; use Prettus\Repository\Providers\RepositoryServiceProvider; use Webkul\Activity\Providers\ActivityServiceProvider; // ... 其余 Webkul 模块提供者 return [ /* * Package Service Providers... */ ServiceProvider::class, ConcordServiceProvider::class, RepositoryServiceProvider::class, /* * Application Service Providers... */ AppServiceProvider::class, /* * Webkul Service Providers... */ ActivityServiceProvider::class, AdminServiceProvider::class, // ... ];这份清单涵盖了 Concord模块化内核、l5-repository仓储层、DomPDFPDF 导出以及 Activity、Admin、Attribute、Automation、Contact、Core、DataGrid、DataTransfer、Email、EmailTemplate、GoogleContact、Installer、Lead、Marketing、Product、Quote、Tag、User、Warehouse、WebForm 等全部 Krayin 业务模块。新增或移除第三方包后需要手动维护这份文件或重新执行php artisan package:discover生成自动发现结果。3. Kernel 移除中间件与调度迁移到新位置影响概率高app/Http/Kernel.php与app/Console/Kernel.php在 Laravel 12 中被移除HTTP 中间件全局中间件、中间件分组、优先级现在全部通过bootstrap/app.php的withMiddleware()配置见上文真实代码命令调度Scheduling原Console\Kernel中的schedule()逻辑迁移到 routes/console.php。Krayin 在该文件中注册了邮件轮询任务use Illuminate\Support\Facades\Schedule; Schedule::command(inbound-emails:process)-everyFiveMinutes();这意味着如果你此前在Console\Kernel::schedule()中自定义过定时任务升级后需要把它们搬进routes/console.php改用Schedule::command(...)、Schedule::call(...)等门面 API 注册。4. 异常处理移入bootstrap/app.php影响概率高app/Exceptions/Handler.php在 Laravel 12 中被移除异常处理统一由bootstrap/app.php的withExceptions()闭包接管。当前 Krayin 仓库中该闭包为空//即使用框架默认行为但需要注意Krayin Admin 模块仍保留着自己的异常渲染逻辑packages/Webkul/Admin/src/Exceptions/Handler.php 中定义了 401/403/404/500 的 JSON 错误文案与自定义错误页admin::errors.index。该 Handler 仍以传统ExceptionHandler子类形式存在并由 Admin 模块自身注册因此升级后自定义异常渲染时需要同时理解应用级bootstrap/app.php与模块级Admin Handler两层机制。5. 内置中间件包装类移除与自定义方式影响概率高Laravel 12 移除了EncryptCookies、VerifyCsrfToken、TrimStrings、TrustProxies等内置中间件包装类。此前通过继承这些类实现的自定义如修改$except数组不再可行统一改为在bootstrap/app.php的withMiddleware()中调用对应方法原包装类 / 传统做法Laravel 12 新写法Middleware $middlewareEncryptCookies的$except$middleware-encryptCookies(except: [...])VerifyCsrfToken的$except$middleware-validateCsrfTokens(except: [...])全局中间件追加$middleware-append(Class::class)API 组前置中间件$middleware-api(prepend: [Class::class])可信代理等全局配置$middleware-trustProxies(...)等对应方法Krayin 的 bootstrap/app.php 正是用这套新 API 完成了 Cookie 豁免、CSRF 豁免与 Sanctum 中间件注入。6. 服务提供者简化与config/app.php瘦身影响概率中AuthServiceProvider、EventServiceProvider、RouteServiceProvider、BroadcastServiceProvider四个骨架提供者被移除其职责分别由以下位置接管路由注册bootstrap/app.php的withRouting()事件监听保留在AppServiceProvider::boot()或各模块的EventServiceProvider如 Webkul 各包的Providers/EventServiceProvider广播频道保留在 routes/channels.phpKrayin 在其中注册了App.Models.User.{id}频道鉴权应用级服务绑定保留在 app/Providers/AppServiceProvider.php。相应地config/app.php 不再包含providers与aliases数组。从仓库当前内容看该文件仅保留name、env、debug、url、admin_path、timezone、locale、available_locales、currency、key、cipher、maintenance等纯配置键其中admin_path默认admin与available_locales内置 9 种语言含zh_CN简体中文是 Krayin 特有的配置项。7. doctrine/dbal 依赖移除影响概率低doctrine/dbal依赖已从 composer.json 中移除。Laravel 12 原生支持列修改native column modification不再需要该扩展来执行change()等列变更操作。这意味着依赖树更轻composer install更快无需再为列变更安装额外的数据库抽象层使用Schema::table(...)-change()的迁移可直接运行仓库中如2026_06_10_000000_make_value_nullable_in_core_config_table.php这类修改列结构的迁移即依赖此能力。升级后的验证与回归测试升级完成后建议按以下清单逐项验证版本核对php -v确认 PHP ≥ 8.3php artisan --version确认 Laravel 12。引导链路确认 bootstrap/app.php 的路由文件路径、中间件豁免规则符合你的部署环境尤其是admin/mail/inbound-parse与 Web Form 的 CSRF 豁免是否与你的反代/子目录配置冲突。服务提供者核对 bootstrap/providers.php 是否完整包含你所用的模块新增包后及时同步。调度任务确认 routes/console.php 中inbound-emails:process等任务仍在计划内运行。回归测试仓库在 tests/Feature 下提供了多个针对新版框架的测试例如 AuthenticationHardeningTest.php 覆盖管理员登录的限流rate limiting等安全行为并显式以CACHE_STOREarray隔离缓存状态。升级后可运行php artisan test执行整套测试以验证框架升级未破坏核心链路。常见坑位速查升级项常见问题处理方式PHP 8.3composer install报平台要求错误升级运行时或使用--ignore-platform-reqphp仅本地调试不建议生产使用Kernel 移除App\Http\Kernel类引用报错将中间件迁移到bootstrap/app.php删除类引用中间件包装类移除继承VerifyCsrfToken的类失效改用validateCsrfTokens(except: [...])config/app.php发现providers/aliases被忽略迁移到bootstrap/providers.php与对应注册点doctrine/dbal迁移中change()报错确认框架版本 ≥ 12使用原生列修改无需该依赖总结Krayin CRM v2.2 的升级本质上是随 Laravel 12 完成的一次架构现代化应用引导从分散的多个 Kernel/Handler 收敛到 bootstrap/app.php 单点配置服务提供者统一到 bootstrap/providers.php调度逻辑下沉到 routes/console.php同时将运行时门槛提升到 PHP 8.3 并移除 doctrine/dbal。对开发者而言最值得关注的高影响项集中在引导方式变更与中间件/异常处理迁移按本文的对照表逐项迁移并借助仓库测试套件回归验证即可顺利完成 v2.1 → v2.2 的升级。赞分享后端前端企业应用【免费下载链接】laravel-crmKrayin CRM is Free Open Source CRM Built with Laravel for Customer, Lead, and Sales Management.项目地址https://gitcode.com/GitHub_Trending/la/laravel-crm点击查看免费下载相关推荐tsParticles 迁移指南从 particles.js 平滑升级完整实践tsParticles 迁移指南从 particles.js 平滑升级完整实践 导读本指南以 markdown/pjsMigration.md https:前端GRDB.swift 6 迁移指南从 GRDB 5 平滑升级的完整实践GRDB.swift 6 迁移指南从 GRDB 5 平滑升级的完整实践 本指南以 GRDB.swift 官方文档 Documentation/GRDB6Mig数据库ORMisort 5.0.0 升级指南从 4.x 平滑迁移的完整实践手册isort 5.0.0 升级指南从 4.x 平滑迁移的完整实践手册 isort 5.0.0 是 isort 五年来第一个主版本发布也是自项目诞生十余年以来最开发工具代码质量格式化Lint上一篇微信聊天记录怎么永久保存留痕WeChatMsg三个问题讲明白下一篇Spatie URL包的Macroable特性如何扩展URL功能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表