Filament 的 domain() 方法用于限定 Panel 访问域名,需搭配 Laravel 11 + Filament v4/v5 使用;配置须在 AdminPanelProvider 中链式调用,同步检查 routes/web.php、SESSION_DOMAIN 和 APP_URL。

Filament 的 domain() 方法用于将某个 Panel 限定在特定域名下访问,但需注意:Laravel 13 尚未发布(截至 2026 年 11 月,最新稳定版为 Laravel 11),当前 Filament v4/v5 官方兼容的最高 Laravel 版本是 Laravel 11。若你实际使用的是 Laravel 11 + Filament v4 或 v5,则 domain() 可正常工作;若误称“Laravel 13”,请先确认真实版本,避免因框架不匹配导致方法无效或路由不注册。
确认 Panel 配置入口位置
所有域名限制必须在 Panel 的 Service Provider 中配置,通常是:app/Providers/Filament/AdminPanelProvider.php
确保该文件已通过 php artisan filament:install --panels 正确生成,并已在 config/app.php 的 providers 数组中注册。
使用 domain() 方法绑定指定域名
在 panel() 方法内链式调用 domain(),传入完整域名(不含协议,不带路径):
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 只允许
admin.example.com访问:->domain('admin.example.com') - 支持多级子域(如
panel.dev.example.com)需显式列出,Filament 不支持通配符*.example.com - 开发环境常用
localhost或127.0.0.1,但注意浏览器可能拒绝非标准端口下的 cookie,建议配合APP_URL=http://localhost:8000使用
配套关键配置不能遗漏
domain() 单独设置不会自动生效,还需同步检查以下三点:
-
路由注册方式:确保
routes/web.php中调用了Filament::routes(),且该调用未被条件包裹(如if (app()->environment('local'))) -
SESSION_DOMAIN 设置:在
.env中设SESSION_DOMAIN=.example.com(注意开头的点),否则跨子域登录态无法共享,用户会反复跳转登录页 -
HTTPS 兼容性:若域名启用 HTTPS,确认
APP_URL为https://开头,且服务器已正确配置 SSL;否则部分中间件(如 TrustProxies)可能拦截请求
验证是否生效
部署后可通过以下方式快速验证:
- 在非目标域名下访问
/admin,应返回 404 或重定向到首页(取决于路由 fallback 配置) - 查看生成的路由列表:
php artisan route:list | grep admin,确认domain列显示对应域名 - 临时在
AdminPanelProvider的panel()方法末尾加dd($panel->getDomain());,访问时确认输出值正确










