Skip to content
全部文档

文本输入列

简介

文本输入列允许你在表格中渲染文本输入框,用于更新该数据库记录,而无需打开新页面或模态框:

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('email')
文本输入列文本输入列

验证

你可以通过传入数组形式的任意 Laravel 验证规则 来验证输入:

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('name')
    ->rules(['required', 'max:255'])

自定义 HTML input 类型

你可以使用 type() 方法传入自定义的 HTML input 类型

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('background_color')->type('color')

设置 HTML input mode

你可以使用 inputMode() 方法设置 HTML inputmode 属性,以提示移动端应显示的键盘类型。对于数值输入,小数使用 inputMode('decimal'),整数使用 inputMode('numeric')

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('quantity')
    ->type('number')
    ->inputMode('decimal')

设置数值步进

使用 type('number') 时,你可以使用 step() 方法设置 HTML step 属性。小数使用 step('any'),整数使用 step('1')

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('quantity')
    ->type('number')
    ->inputMode('decimal')
    ->step('1')

在字段旁添加前后缀文本

你可以使用 prefix()suffix() 方法在输入框前后放置文本:

php
use Filament\Tables\Columns\TextInputColumn;

TextInputColumn::make('domain')
    ->prefix('https://')
    ->suffix('.com')

TIP

除静态值外,prefix()suffix() 方法也接受函数以动态计算这些值。你可以将各种工具作为参数注入到函数中。

带前后缀的文本输入列带前后缀的文本输入列

使用图标作为前后缀

你可以使用 prefixIcon()suffixIcon() 方法在输入框前后放置图标

php
use Filament\Tables\Columns\TextInputColumn;
use Filament\Support\Icons\Heroicon;

TextInputColumn::make('domain')
    ->prefixIcon(Heroicon::GlobeAlt)
    ->suffixIcon(Heroicon::CheckCircle)

TIP

除静态值外,prefixIcon()suffixIcon() 方法也接受函数以动态计算这些值。你可以将各种工具作为参数注入到函数中。

带前缀图标的文本输入列带前缀图标的文本输入列

设置前后缀图标颜色

前后缀图标默认为灰色,但你可以使用 prefixIconColor()suffixIconColor() 方法设置不同颜色:

php
use Filament\Tables\Columns\TextInputColumn;
use Filament\Support\Icons\Heroicon;

TextInputColumn::make('status')
    ->suffixIcon(Heroicon::CheckCircle)
    ->suffixIconColor('success')

TIP

除静态值外,prefixIconColor()suffixIconColor() 方法也接受函数以动态计算这些值。你可以将各种工具作为参数注入到函数中。

带彩色后缀图标的文本输入列带彩色后缀图标的文本输入列

生命周期钩子

可使用钩子在输入生命周期的各个时刻执行代码:

php
TextInputColumn::make()
    ->beforeStateUpdated(function ($record, $state) {
        // Runs before the state is saved to the database.
    })
    ->afterStateUpdated(function ($record, $state) {
        // Runs after the state is saved to the database.
    })

安全性

授权

文本输入列在保存更改前不会自动检查 Laravel 模型策略(Model Policies)。当用户通过文本输入列更新值时,Filament 会检查该列是否 disabled(),但不会运行任何 update 策略门控检查。这意味着,只要用户能在表格中看到某条记录且该列未被禁用,即可更新该列的值,而不受你定义的任何 update 策略约束。若需限制谁可以编辑此列,应使用 disabled() 方法,根据你自己的授权逻辑有条件地阻止编辑,例如 disabled(fn ($record) => $record->user_id !== auth()->id())。或者,考虑使用完整的编辑页面或模态操作,在那里会强制执行 Filament 的资源授权。