跳到主要内容
版本:3.0

高级列

表格列 utility 注入

大部分用于配置的方法接受函数作为参数,而不只是硬编码值:

use Filament\Tables\Columns\TextColumn;

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

仅此一点就开启了许多自定义的可能性。

该包也将许多 utilities 作为参数注入到这些函数中。所有接受函数作为参数的自定义方法都可以注入 utilities。

这些注入的 utilities 要求使用特定的参数名。否则,Filament 不知道注入了什么。

注入当前列状体

如果你想访问列字段的当前状态(值),请定义 $state 参数:

function ($state) {
// ...
}

注入当前 Eloquent 记录

如果你想要访问列字段的当前 Eloquent 记录,请定义 $record 参数:

use Illuminate\Database\Eloquent\Model;

function (Model $record) {
// ...
}

请注意,如果这个列没有绑定到 Eloquent 记录,则这个参数值为 null。比如,列字段的 label()方法将无法访问记录,因为标签没有关联到任何记录。

注入当前列实例

如果你想访问当前列实例,请定义 $column 参数:

use Filament\Tables\Columns\Column;

function (Column $column) {
// ...
}

注入当前 Livewire 组件实例

如果你想要访问表格所属的当前 Livewire 组件实例,请定义 $livewire 参数:

use Filament\Tables\Contracts\HasTable;

function (HasTable $livewire) {
// ...
}

注入当前表格实例

如果你想要访问列字段所属的当前表格配置实例,请定义 $livewire 参数:

use Filament\Tables\Table;

function (Table $table) {
// ...
}

注入当前表格行循环

如果你想访问当前列中渲染的 Laravel Blade loop 对象,请定义 $rowLoop 参数:

function (stdClass $rowLoop) {
// ...
}

由于 $rowLoopLaravel Blade 的 $loop 对象,你可以使用 $rowLoop->index 访问当前行索引。类似于 $record,如果该列当前在表格行之外渲染,这个参数将会是 null

注入多个 utilities

参数使用反射动态注入,因此你可以以任何顺序联合使用多个参数:

use Filament\Tables\Contracts\HasTable;
use Illuminate\Database\Eloquent\Model;

function (HasTable $livewire, Model $record) {
// ...
}

从 Laravel 容器中注入依赖

你可以从 Laravel 容器中注入任何东西,与 utilities 一起:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;

function (Request $request, Model $record) {
// ...
}