Skip to content
全部文档

多行文本框

简介

多行文本框可让你与多行字符串交互:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
多行文本框多行文本框

调整多行文本框尺寸

你可以通过 rows()cols() 方法更改多行文本框的尺寸:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->rows(10)
    ->cols(20)
自定义行数的多行文本框自定义行数的多行文本框

TIP

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

自动调整多行文本框尺寸

你可以使用 autosize() 方法让多行文本框根据内容自动调整尺寸:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->autosize()

可选地,你可以传入布尔值来控制多行文本框是否可自动调整尺寸:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->autosize(FeatureFlag::active())

TIP

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

启用自动调整尺寸的多行文本框启用自动调整尺寸的多行文本框

使字段只读

请勿与 禁用字段 混淆,你可以使用 readOnly() 方法使字段「只读」:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->readOnly()

disabled() 相比有若干差异:

  • 使用 `readOnly()` 时,提交表单时字段仍会发送到服务器。可通过浏览器控制台或 JavaScript 修改。你可以使用 [`saved(false)`](/5.x/forms/overview#preventing-a-field-from-being-saved) 来阻止保存。
  • 使用 `readOnly()` 时不会有样式变化(例如降低不透明度)。
  • 使用 `readOnly()` 时字段仍可获得焦点。

可选地,你可以传入布尔值来控制字段是否只读:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->readOnly(FeatureFlag::active())

TIP

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

禁用 Grammarly 检查

若用户安装了 Grammarly,而你希望阻止其分析多行文本框内容,可以使用 disableGrammarly() 方法:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->disableGrammarly()

可选地,你可以传入布尔值来控制是否禁用 Grammarly 检查:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->disableGrammarly(FeatureFlag::active())

TIP

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

去除空白字符

你可以使用 trim() 方法自动去除多行文本框值首尾的空白字符:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->trim()

你可能希望为所有多行文本框全局启用去除空白,类似于 Laravel 的 TrimStrings 中间件。可在服务提供者中使用 configureUsing() 方法实现:

php
use Filament\Forms\Components\Textarea;

Textarea::configureUsing(function (Textarea $component): void {
    $component->trim();
});

多行文本框校验

校验 页面列出的全部规则外,还有专门适用于多行文本框的额外规则。

长度校验

你可以通过 minLength()maxLength() 方法限制多行文本框的长度。这些方法会同时添加前端与后端校验:

php
use Filament\Forms\Components\Textarea;

Textarea::make('description')
    ->minLength(2)
    ->maxLength(1024)

你也可以通过 length() 指定多行文本框的精确长度。该方法会同时添加前端与后端校验:

php
use Filament\Forms\Components\Textarea;

Textarea::make('question')
    ->length(100)

TIP

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