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

如何将Filament Infolist的视图页面标题改为动态内容?

问题

我有一个名为role的Filament资源,包含视图路由,相关代码如下:

RoleResource.php

class RoleResource extends Resource
{
    protected static ?string $model = Role::class;

    public static function infolist(Infolist $infolist): Infolist
    {
        return $infolist
            ->schema([
                Section::make([
                    TextEntry::make('title'),
                    TextEntry::make('url'),
                ]),
            ]);
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\\ListRoles::route('/'),
            'create' => Pages\\CreateRole::route('/create'),
            'edit' => Pages\\EditRole::route('/{record}/edit'),
            'view' => Pages\\ViewRole::route('/{record}'),
        ];
    }
}

ViewRole.php

class ViewRole extends ViewRecord
{
    protected static string $resource = RoleResource::class;
}

当前视图页面的标题固定显示为「View Role」,如何将其修改为动态标题(例如「View {title}」,其中{title}为当前角色的title字段值)?

解决方案

要实现动态页面标题,只需在ViewRole.php中重写getTitle()方法,直接返回包含当前记录字段的自定义标题即可:

class ViewRole extends ViewRecord
{
    protected static string $resource = RoleResource::class;

    // 重写getTitle方法生成动态标题
    public function getTitle(): string
    {
        return "View {$this->record->title}";
    }
}

如果需要在资源层面统一管理标题逻辑(方便其他页面复用),可以在RoleResource中定义getRecordTitleAttribute()方法:

RoleResource.php

class RoleResource extends Resource
{
    protected static ?string $model = Role::class;

    // 定义记录的标题属性
    public static function getRecordTitleAttribute($record): string
    {
        return $record->title;
    }

    // 原有代码保持不变
    public static function infolist(Infolist $infolist): Infolist
    {
        return $infolist
            ->schema([
                Section::make([
                    TextEntry::make('title'),
                    TextEntry::make('url'),
                ]),
            ]);
    }

    public static function getPages(): array
    {
        return [
            'index' => Pages\\ListRoles::route('/'),
            'create' => Pages\\CreateRole::route('/create'),
            'edit' => Pages\\EditRole::route('/{record}/edit'),
            'view' => Pages\\ViewRole::route('/{record}'),
        ];
    }
}

然后在ViewRole.php中简化重写逻辑:

class ViewRole extends ViewRecord
{
    protected static string $resource = RoleResource::class;

    public function getTitle(): string
    {
        return "View {$this->getRecordTitle()}";
    }
}

修改后,视图页面的标题会自动替换为「View [当前角色的title字段值]」,满足动态标题需求。

内容的提问来源于stack exchange,提问作者Adam Hopkinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:20:04