filament 在 xampp 下运行需 apache、php(≥8.1)及 laravel 三者对齐:先启用 mbstring、pdo、openssl 等扩展并重启 apache,再确保重写模块开启、.htaccess 生效、laravel 环境配置完整(.env、app_key、迁移、缓存清理),最后正确实现模型契约并保障 storage/ 和 bootstrap/cache/ 目录可写。

Filament 在 XAMPP 下能跑起来,但前提是 Apache、PHP 和 Laravel 三者全部对齐——漏掉任意一环,你看到的不是登录页,而是 404、500 或满屏 Class not found 错误。别急着 composer require,先确认 PHP ≥ 8.1 且 mbstring、pdo、openssl 全开着,否则 Filament 安装命令根本走不到第二步。
确认 XAMPP 的 PHP 版本和关键扩展是否启用
很多人卡在第一步:执行 php artisan filament:install --panels 直接报错 mbstring extension is required 或 Class 'PDO' not found。这不是 Filament 的问题,是 XAMPP 的 PHP 配置没调好。
- 打开 XAMPP 控制面板 → Shell → 运行
php -v:必须显示PHP 8.1.x或更高;XAMPP 7.4(含 PHP 7.4)完全不兼容 Laravel 10+ 和 Filament v3 - 运行
php -m | findstr /i "mbstring openssl pdo tokenizer xml ctype json"(Windows)或php -m | grep -E "mbstring|openssl|pdo"(macOS/Linux):缺哪个就启哪个 - 编辑
C:\xampp\php\php.ini(路径按你实际安装位置调整),取消以下几行前的分号:extension=mbstring、extension=openssl、extension=pdo_mysql、extension=tokenizer、extension=xml、extension=ctype、extension=json - 改完保存,**必须重启 Apache** —— 只重启 PHP-FPM 不生效,XAMPP 的 PHP 是由 Apache 加载的
Apache 必须正确路由到 public/ 并启用重写
即使 Laravel 欢迎页能打开,Filament 的 /admin 路由仍会 404,大概率是 Apache 没读 .htaccess 或压根没把请求转给 index.php。
- 打开
C:\xampp\apache\conf\httpd.conf,确认LoadModule rewrite_module modules/mod_rewrite.so这行**没有被注释**(删掉开头的#) - 找到
<directory></directory>块(注意路径要和你放项目的目录一致),把里面的AllowOverride None改成AllowOverride All - 确保你的 Laravel 项目根目录下有
public/.htaccess,且第一行是RewriteEngine On;如果项目放在htdocs/myapp,还需在.htaccess中添加RewriteBase /myapp/ - 验证方式:在
htdocs下新建一个test/.htaccess,内容只写RewriteEngine On,然后访问http://localhost/test/—— 如果返回 500,说明重写模块已加载且生效;如果 404 或直接显示目录列表,说明配置失败
安装 Filament 前必须完成 Laravel 基础配置
composer require filament/filament:~3.0 只是第一步,Filament v3 强依赖 Laravel 10+ 和正确的环境初始化。跳过下面任何一项,后续所有 php artisan make:filament-* 命令都会失败。
- 确保
.env文件存在且位于 Laravel 项目根目录(不是public/下),用 VS Code 或 Notepad++ 保存为 UTF-8 无 BOM 格式;检查APP_KEY是否为空,为空才运行php artisan key:generate - 运行
php artisan migrate—— Filament 默认不带迁移,但它的用户认证(Fortify)和你自己的模型都需要数据库支持;若用默认User模型做管理员,需先创建测试用户:php artisan tinker→User::factory()->create(['email' => 'admin@example.com']) - 执行
php artisan filament:install --panels:这一步会生成app/Providers/Filament/AdminPanelProvider.php并注册进config/app.php;漏掉它,php artisan make:filament-resource会报Class "App\Providers\Filament\AdminPanelProvider" not found - 清缓存:
php artisan config:clear && php artisan cache:clear && php artisan view:clear—— XAMPP 下缓存有时不会自动刷新,尤其改了配置后
生成 Resource 后模型必须手动补充契约
php artisan make:filament-resource User 只生成骨架文件,不会自动让 User 模型支持 Filament 的表格列、表单字段等能力。常见报错如 Call to undefined method App\Models\User::getFilamentTableColumns() 就是因为这个。
- 在
app/Models/User.php中引入 trait:use Filament\Panel\Traits\HasFilamentTableColumns; - 实现
FilamentUser接口并定义canAccessPanel()方法(哪怕只是return true;) - 检查
UserResource::getTableColumns()返回的列名,比如TextColumn::make('name'),必须对应模型里可访问的属性($fillable、访问器或数据库字段);若用deleted_at但没启用软删除,记得在 form() 中排除:Hidden::make('deleted_at') - 访问
http://myapp.test/admin(虚拟主机域名)或http://localhost/myapp/public/admin(直连路径);首次访问可能慢,因为 Livewire 和 Tailwind CSS 资源需编译
最常被忽略的其实是权限和路径绑定:XAMPP 下 storage/ 和 bootstrap/cache/ 目录必须对 Apache 用户可写(Windows 上右键 → 属性 → 安全 → 编辑权限);而 Filament 的 /admin 路由能否命中,最终取决于 Apache 是否把请求完整转发给了 Laravel 的 index.php,而不是前端 JS 路由或 Nginx 配置那一套逻辑。











