可重复条目
简介
可重复条目可对数组或关联中的每一项,重复一组条目与布局组件。
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.',
],
]

或者,comments 与 author 可以是 Eloquent 关联,title 与 content 可以是评论模型上的属性,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::Start、Alignment::Center 或 Alignment::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')