Skip to content
全部文档

可重复条目

简介

可重复条目可对数组或关联中的每一项,重复一组条目与布局组件。

php
use Filament\Infolists\Components\RepeatableEntry;
use Filament\Infolists\Components\TextEntry;

RepeatableEntry::make('comments')
    ->schema([
        TextEntry::make('author.name'),
        TextEntry::make('title'),
        TextEntry::make('content')
            ->columnSpan(2),
    ])
    ->columns(2)

可以看到,可重复条目内嵌了 schema(),会为每一项重复渲染。

例如,该条目的状态可能表示为:

php
[
    [
        'author' => ['name' => 'Jane Doe'],
        'title' => 'Wow!',
        'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam euismod, nisl eget aliquam ultricies, nunc nisl aliquet nunc, quis aliquam nisl.',
    ],
    [
        'author' => ['name' => 'John Doe'],
        'title' => 'This isn\'t working. Help!',
        'content' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam euismod, nisl eget aliquam ultricies, nunc nisl aliquet nunc, quis aliquam nisl.',
    ],
]
可重复条目可重复条目

或者,commentsauthor 可以是 Eloquent 关联,titlecontent 可以是评论模型上的属性,name 可以是作者模型上的属性。Filament 会自动处理关联加载,并以相同方式显示数据。

网格布局

可使用 grid() 方法将可重复项组织成列:

php
use Filament\Infolists\Components\RepeatableEntry;

RepeatableEntry::make('comments')
    ->schema([
        // ...
    ])
    ->grid(2)

该方法接受的选项与 网格columns() 方法相同,可让你在不同断点下响应式自定义网格列数。

TIP

除了接受静态值外,grid() 方法也接受函数以动态计算。你可以将各种工具作为参数注入该函数。

网格布局的可重复条目网格布局的可重复条目

移除带样式的容器

默认情况下,可重复条目中的每一项都会包裹在卡片样式的容器中。可使用 contained() 移除带样式的容器:

php
use Filament\Infolists\Components\RepeatableEntry;

RepeatableEntry::make('comments')
    ->schema([
        // ...
    ])
    ->contained(false)

TIP

除了接受静态值外,contained() 方法也接受函数以动态计算。你可以将各种工具作为参数注入该函数。

无样式容器的可重复条目无样式容器的可重复条目

表格式可重复布局

可使用 table() 方法以表格形式展示可重复项,该方法接受 TableColumn 对象数组。这些对象表示表格的列,对应条目 schema 中的各个组件:

php
use Filament\Infolists\Components\IconEntry;
use Filament\Infolists\Components\RepeatableEntry;
use Filament\Infolists\Components\RepeatableEntry\TableColumn;
use Filament\Infolists\Components\TextEntry;

RepeatableEntry::make('comments')
    ->table([
        TableColumn::make('Author'),
        TableColumn::make('Title'),
        TableColumn::make('Published'),
    ])
    ->schema([
        TextEntry::make('author.name'),
        TextEntry::make('title'),
        IconEntry::make('is_published')
            ->boolean(),
    ])
表格布局的可重复条目表格布局的可重复条目

表格表头中显示的标签通过 TableColumn::make() 方法传入。若要为列提供无访问标签但不希望显示,可使用 hiddenHeaderLabel() 方法:

php
use Filament\Infolists\Components\RepeatableEntry\TableColumn;

TableColumn::make('Name')
    ->hiddenHeaderLabel()

可使用 wrapHeader() 方法启用列表头换行:

php
use Filament\Infolists\Components\RepeatableEntry\TableColumn;

TableColumn::make('Name')
    ->wrapHeader()

也可使用 alignment() 方法调整列表头对齐方式,传入 Alignment::StartAlignment::CenterAlignment::End

php
use Filament\Infolists\Components\RepeatableEntry\TableColumn;
use Filament\Support\Enums\Alignment;

TableColumn::make('Name')
    ->alignment(Alignment::Center)

可使用 width() 方法设置固定列宽,传入表示列宽的字符串。该值会直接传给列表头的 style 属性:

php
use Filament\Infolists\Components\RepeatableEntry\TableColumn;

TableColumn::make('Name')
    ->width('200px')