跳到主要内容
版本:3.0

Text entry

概述

TextEntry 显示简单的文本:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('title')
Text entry

显示成"徽章"

默认情况下,文本很简单且没有背景色。你可以使用 badge() 方法使之显示成徽章。这一功能的一个很好的用例是带状态的文本,你可能想要显示与该状态相匹配的颜色徽章:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('status')
->badge()
->color(fn (string $state): string => match ($state) {
'draft' => 'gray',
'reviewing' => 'warning',
'published' => 'success',
'rejected' => 'danger',
})
Text entry as badge

你也可以添加其他东西到徽章中,比如图标

日期格式化

你可以使用 date()dateTime() 方法,使用 PHP 日期格式化 token 将 Entry 的值格式化:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('created_at')
->dateTime()

你也可以使用 since(),使用 [Carbon 的 diffForHumans()] 将 Entry 值格式化:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('created_at')
->since()

数字格式化

numeric() 方法允许你使用 PHP 的 number_format() 将 Entry 格式化为数字:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('stock')
->numeric(
decimalPlaces: 0,
decimalSeparator: '.',
thousandsSeparator: ',',
)

货币格式化

money() 方法允许你轻松格式化任何货币的金额值:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('price')
->money('EUR')

限制文本长度

你可以通过 limit() 限制 Entry 值的长度:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('description')
->limit(50)

你可以重用传递给 limit() 的值:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('description')
->limit(50)
->tooltip(function (TextEntry $entry): ?string {
$state = $entry->getState();

if (strlen($state) <= $entry->getCharacterLimit()) {
return null;
}

// 只有 Entry 内容超过长度限制时,才渲染 tooltip。
return $state;
})

限制字数

使用 words(),你可以限制 Entry 中展示的字数:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('description')
->words(10)

展示多个值

默认情况下,如果你的 TextEntry 中有多个值,则它们会以逗号隔开。你可以使用 listWithLineBreaks() 方法将其显示为多行:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('authors.name')
->listWithLineBreaks()
Text entry with multiple values

列表中添加点号

使用 bulleted() 方法,你可以为每个列表项添加点号:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('authors.name')
->listWithLineBreaks()
->bulleted()
Text entry with multiple values and bullet points

限制列表中值的数量

使用 limitList() 方法,你可以限制列表中值的数量:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('authors.name')
->listWithLineBreaks()
->limitList(3)

使用列表分隔符

如果你想将模型中的文本字符串打散(explode)成多个列表项,你可以使用 separator() 方法。这对于显示以逗号分隔的标签(#显示成徽章)很有用。比如:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('tags')
->badge()
->separator(',')

渲染 HTML

如果你的 Entry 值是 HTML,你可以使用 html() 对其进行渲染:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('description')
->html()

将 Markdown 渲染成 HTML

如果你的 Entry 值是 Markdown 格式,你可以使用 markdown() 对其渲染:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('description')
->markdown()

自定义格式化

你可以将自定义格式回调传递给 formatStateUsing(),该回调接收 Entry 的 state 作为参数,及可选参数 $record:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('status')
->formatStateUsing(fn (string $state): string => __("statuses.{$state}"))

当 Entry 为空时添加占位符

有时候如果 Entry 值为空,你可能想要显示占位符:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('updated_at')
->placeholder('Never')

自定义颜色

你可以为文本设置颜色,可以是 dangergrayinfoprimarysuccesswarning

use Filament\Infolists\Components\TextEntry;

TextEntry::make('status')
->color('primary')
Text entry in the primary color

添加图标

TextEntry 也可以拥有图标

use Filament\Infolists\Components\TextEntry;

TextEntry::make('email')
->icon('heroicon-m-envelope')
Text entry with icon

你可以使用 iconPosition() 设置图标的位置:

use Filament\Infolists\Components\TextEntry;use Filament\Support\Enums\IconPosition;

TextEntry::make('email')
->icon('heroicon-m-envelope')
->iconPosition(IconPosition::After) // `IconPosition::Before` or `IconPosition::After`
Text entry with icon after

自定义文本大小

你可以使用 size(TextEntrySize::Large) 让文本变大:

use Filament\Infolists\Components\TextEntry;

TextEntry::make('title')
->size(TextEntry\TextEntrySize::Large)
Text entry in a large font size

自定义字体粗细

TextEntry 默认情况下使用常规字粗,不过你可以将其修改为以下选项:FontWeight::ThinFontWeight::ExtraLightFontWeight::LightFontWeight::MediumFontWeight::SemiBoldFontWeight::BoldFontWeight::ExtraBoldFontWeight::Black

比如,你可以使用 weight(FontWeight::Bold) 让字体变粗:

use Filament\Infolists\Components\TextEntry;use Filament\Support\Enums\FontWeight;

TextEntry::make('title')
->weight(FontWeight::Bold)
Text entry in a bold font

自定义字体

你可以将字体(font family)修改为以下选项:FontFamily::SansFontFamily::SerifFontFamily::Mono

比如,使用 fontFamily(FontFamily::Mono) 你可以使用 monospaced 字体:

use Filament\Support\Enums\FontFamily;
use Filament\Infolists\Components\TextEntry;

TextEntry::make('apiKey')
->label('API key')
->fontFamily(FontFamily::Mono)
Text entry in a monospaced font

允许将文本复制到剪切板

你可以使文本可复制(copyable),比如点击 Entry 将文本复制到剪切板,且可选地指定自定义确认消息及时长(毫秒计)。该特性只有在应用启用 SSL 时有效。

use Filament\Infolists\Components\TextEntry;

TextEntry::make('apiKey')
->label('API key')
->copyable()
->copyMessage('Copied!')
->copyMessageDuration(1500)
Text entry with a button to copy it