如何在FilamentPHP中获取当前Tenant ID用于导航配置?
在FilamentPHP多租户应用中添加带当前租户ID的导航链接
实现思路
在AdminPanelProvider中定义导航项时,不要直接硬编码租户ID,而是使用闭包动态生成URL——闭包会在请求上下文执行,此时可以获取到当前登录用户的关联租户。
具体代码实现
在你的AdminPanelProvider.php文件的panel()配置中,找到navigation()方法,添加如下自定义导航项:
use Filament\Facades\Filament; use Filament\Navigation\NavigationItem; public function panel(Panel $panel): Panel { return $panel // ... 其他面板配置 ->navigation([ // ... 原有导航项 NavigationItem::make('租户设置') ->url(function () { // 获取当前租户 $tenant = Filament::getCurrentTenant(); // 仅当存在租户时返回带ID的链接,否则返回默认路径或null return $tenant ? "/{$tenant->id}/settings" : '/settings'; }) ->icon('heroicon-c-cog-6-tooth') // 可选:设置导航图标 ->visible(function () { // 可选:控制仅当有租户时显示该导航项 return Filament::getCurrentTenant() !== null; }), ]); }
关键说明
- 使用
Filament::getCurrentTenant()助手函数获取当前关联的租户,这个方法在请求上下文内可以正确返回当前用户的租户(前提是多租户配置已正确启用)。 - 导航项的
url()方法支持传入闭包,闭包会在每次请求时执行,确保获取到实时的租户ID。 - 通过
visible()闭包可以控制导航项的显示逻辑,比如仅在用户有活跃租户时才显示。
额外注意事项
如果你的租户ID不是使用id字段,记得把代码中的$tenant->id替换为实际的租户标识字段(比如$tenant->uuid)。
内容的提问来源于stack exchange,提问作者Mathéo
相关产品推荐
相关产品推荐

