Skip to content
全部文档

开关

简介

开关组件与 复选框 类似,可让你与布尔值交互。

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_admin')
开关开关

若使用 Eloquent 保存布尔值,请务必为模型属性添加 boolean 类型转换(cast)

php
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * @return array<string, string>
     */
    protected function casts(): array
    {
        return [
            'is_admin' => 'boolean',
        ];
    }

    // ...
}

为开关按钮添加图标

开关还可以使用 图标 表示按钮的「开」与「关」状态。要为「开」状态添加图标,使用 onIcon() 方法;要为「关」状态添加图标,使用 offIcon() 方法:

php
use Filament\Forms\Components\Toggle;
use Filament\Support\Icons\Heroicon;

Toggle::make('is_admin')
    ->onIcon(Heroicon::Bolt)
    ->offIcon(Heroicon::User)

TIP

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

开关图标开关图标

自定义开关按钮颜色

你还可以自定义表示开关「开」或「关」状态的 颜色。要为「开」状态添加颜色,使用 onColor() 方法;要为「关」状态添加颜色,使用 offColor() 方法:

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_admin')
    ->onColor('success')
    ->offColor('danger')

TIP

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

开关关闭状态颜色开关关闭状态颜色
开关开启状态颜色开关开启状态颜色

将标签置于上方

开关字段有两种布局模式:行内(inline)与堆叠(stacked)。默认为行内。

开关为行内时,标签与其相邻:

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_admin')
    ->inline()
标签行内排列的开关标签行内排列的开关

开关为堆叠时,标签位于其上方:

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_admin')
    ->inline(false)

TIP

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

标签位于上方的开关标签位于上方的开关

开关校验

校验 页面列出的全部规则外,还有专门适用于开关的额外规则。

接受校验

你可以使用 accepted() 方法确保开关处于「开」状态:

php
use Filament\Forms\Components\Toggle;

Toggle::make('terms_of_service')
    ->accepted()

可选地,你可以传入布尔值来控制是否应用该校验规则:

php
use Filament\Forms\Components\Toggle;

Toggle::make('terms_of_service')
    ->accepted(FeatureFlag::active())

TIP

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

拒绝校验

你可以使用 declined() 方法确保开关处于「关」状态:

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_under_18')
    ->declined()

可选地,你可以传入布尔值来控制是否应用该校验规则:

php
use Filament\Forms\Components\Toggle;

Toggle::make('is_under_18')
    ->declined(FeatureFlag::active())

TIP

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