You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP7.3升级至8.1后zerospam/laravel-gettext无法运行求助

PHP 7.3升级到8.1后zerospam/laravel-gettext组件报错解决

问题概述

将PHP版本从7.3升级到8.1后,项目依赖的zerospam/laravel-gettext(^8.0)组件无法正常运行,出现方法声明不兼容及类未找到的致命错误。

报错信息

[Wed Oct  5 10:07:23 2022] PHP致命错误:Xinax\LaravelGettext\FileLoader\Cache\ApcuFileCacheLoader::loadResource($resource)的声明必须与Symfony\Component\Translation\Loader\FileLoader::loadResource(string $resource): array兼容,文件路径为C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\FileLoader\Cache\ApcuFileCacheLoader.php第40行
[Wed Oct  5 10:07:23 2022] PHP致命错误:未捕获错误:类“Xinax\LaravelGettext\FileLoader\Cache\ApcuFileCacheLoader”未找到,文件路径为C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Translators\Symfony.php第114行
堆栈跟踪:
#0 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Translators\Symfony.php(63): Xinax\LaravelGettext\Translators\Symfony->createTranslator()<br />
#1 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Translators\Symfony.php(77): Xinax\LaravelGettext\Translators\Symfony->getTranslator()<br />
#2 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Translators\Symfony.php(35): Xinax\LaravelGettext\Translators\Symfony->setLocale('en_CA')<br />
#3 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\LaravelGettextServiceProvider.php(68): Xinax\LaravelGettext\Translators\Symfony->__construct(Object(Xinax\LaravelGettext\Config\Models\Config), Object(Xinax\LaravelGettext\Adapters\LaravelAdapter), Object(Xinax\LaravelGettext\FileSystem), Object(Xinax\LaravelGettext\Storages\SessionStorage))<br />
#4 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(873): Xinax\LaravelGettext\LaravelGettextServiceProvider->Xinax\LaravelGettext{closure}(Object(Illuminate\Foundation\Application), Array)
#5 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(758): Illuminate\Container\Container->build(Object(Closure))
#6 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(851): Illuminate\Container\Container->resolve('Xinax\LaravelGe...', Array, true)#7 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Container\Container.php(694): Illuminate\Foundation\Application->resolve('Xinax\LaravelGe...', Array)<br />
#8 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(836): Illuminate\Container\Container->make('Xinax\LaravelGe...', Array)
#9 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php(119): Illuminate\Foundation\Application->make('Xinax\LaravelGe...', Array)
#10 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Support\helpers.php(18): app('Xinax\LaravelGe...')
#11 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\app\Exceptions\Handler.php(152): _i('Details')
#12 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(196): App\Exceptions\Handler->render(Object(Illuminate\Http\Request), Object(Symfony\Component\ErrorHandler\Error\FatalError))
#13 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(173): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse(Object(Symfony\Component\ErrorHandler\Error\FatalError))
#14 C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(209): Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Symfony\Component\ErrorHandler\Error\FatalError))
#15 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleShutdown()
#16 {main}
抛出位置:C:\Users\pragneshc\promis\Promis3.0\promis3.0-laravel\vendor\zerospam\laravel-gettext\src\Xinax\LaravelGettext\Translators\Symfony.php第114行

项目composer.json依赖片段

"require": {
    "php": "^8.1",
    "artisaninweb/laravel-soap": "0.3.0.9",
    "barryvdh/laravel-dompdf": "^0.8.5",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "^8.0",
    "laravel/homestead": "^13.2",
    "laravel/tinker": "^2.0",
    "maatwebsite/excel": "^3.1",
    "phpoffice/phpspreadsheet": "^1.10",
    "zerospam/laravel-gettext": "^8.0"
},
"require-dev": {
    "facade/ignition": "^2.3.6",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^5.1",
    "phpunit/phpunit": "^9.0"
}

解决方案

1. 升级组件到兼容PHP8.1的版本

zerospam/laravel-gettext 8.x版本未适配PHP8.1的严格类型声明要求,建议升级到支持PHP8.1的最新稳定版本(如9.x系列),执行以下命令:

composer require zerospam/laravel-gettext:^9.0 --update-with-dependencies

升级后需验证组件功能是否正常,避免出现其他兼容问题。

2. 临时修改方法声明(应急方案)

若暂时无法升级组件,可手动修改ApcuFileCacheLoader.php中的方法声明,使其与父类Symfony\Component\Translation\Loader\FileLoader的loadResource方法兼容:
打开文件vendor/zerospam/laravel-gettext/src/Xinax/LaravelGettext/FileLoader/Cache/ApcuFileCacheLoader.php,找到第40行,将:

public function loadResource($resource)

修改为:

public function loadResource(string $resource): array

注意:此修改会在composer update时被覆盖,仅作为临时应急手段,长期使用需依赖组件官方更新。

3. 同步Symfony组件版本

Laravel 8.x对应的Symfony组件可能存在PHP8.1兼容问题,执行以下命令更新Symfony Translation组件至兼容版本:

composer update symfony/translation --with-dependencies

内容的提问来源于stack exchange,提问作者Pragnesh Chauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:55:17