Filament v3.2部署报错:Filament\Forms\Components\FieldSet类未找到
本地Windows 11环境运行完全正常,但部署到Ubuntu 20.04生产服务器后,抛出错误:Class "Filament\Forms\Components\FieldSet" not found
已核对文件大小写,且执行过composer install,仅服务器端出现该问题。
环境详情
- 本地:Windows 11
- 服务器:Ubuntu 20.04
- Laravel版本:11
- Filament版本:3.2
composer.json内容
{ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.2", "althinect/filament-spatie-roles-permissions": "^2.2", "arbermustafa/filament-locationpickr-field": "2.0.0", "awcodes/filament-quick-create": "^3.4", "bezhansalleh/filament-language-switch": "^3.1", "bezhansalleh/filament-shield": "^3.2", "blade-ui-kit/blade-heroicons": "^2.4", "filament/filament": "^3.2", "laravel/framework": "^11.9", "laravel/sanctum": "^4.0", "laravel/tinker": "^2.9", "malzariey/filament-daterangepicker-filter": "^3.0", "outhebox/blade-flags": "^1.5", "propaganistas/laravel-phone": "^5.3", "solution-forest/filament-access-management": "^2.2", "spatie/laravel-permission": "^6.9", "spatie/laravel-translatable": "^6.8", "ysfkaya/filament-phone-input": "^3.1" }, "require-dev": { "fakerphp/faker": "^1.23", "laravel/pint": "^1.13", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "phpunit/phpunit": "^11.0.1" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi", "@php artisan filament:upgrade" ], "post-update-cmd": [ "@php artisan vendor:publish --tag=laravel-assets --ansi --force" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi", "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" ] }, "extra": { "laravel": { "dont-discover": [] } }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "allow-plugins": { "pestphp/pest-plugin": true, "php-http/discovery": true } }, "minimum-stability": "dev", "prefer-stable": true }
已尝试的解决方案
- 删除vendor文件夹后重新执行
composer install - 重新克隆项目并执行完整安装步骤
- 在另一台Windows机器测试代码,运行正常
- 设置文件夹权限为755,所有者为www-data:www-data
- 执行缓存清除命令:
php artisan config:clear、php artisan cache:clear等
解决思路
核对类名大小写
Ubuntu是大小写敏感系统,Filament 3.x中该组件的正确类名是Filament\Forms\Components\Fieldset(最后一个字母小写),Windows不区分大小写所以能正常运行,需确认代码中是否误写为FieldSet。验证Filament包完整性
在服务器执行composer show filament/forms查看安装版本,同时检查vendor/filament/forms/src/Components/目录下是否存在Fieldset.php文件。若文件缺失,执行composer update filament/filament --no-cache强制更新包。重新生成自动加载文件
你的composer配置中optimize-autoloader为true,执行composer dump-autoload --optimize重新生成优化后的自动加载映射,确保类路径匹配正确。排查第三方扩展冲突
项目中多个Filament第三方扩展可能依赖旧版本组件,导致类名引用不一致。可临时注释非核心扩展(如althinect/filament-spatie-roles-permissions、solution-forest/filament-access-management),重新部署测试定位问题。清理生产环境编译缓存
执行php artisan clear-compiled清除编译类缓存,避免部署时提前执行php artisan optimize导致自动加载文件与服务器环境不匹配。
内容的提问来源于stack exchange,提问作者Muhammed Adel

