表格 - Columns
自定义 Column
简介
你可以创建自定义 Column 列和视图,以便在项目中重用。甚至可以将它们以插件的形式发布到社区。
要创建自定义 Column 列和视图,你可以使用如下命令:
php artisan make:filament-table-column AudioPlayerColumn
该命令将会创建如下组件类:
use Filament\Tables\Columns\Column;
class AudioPlayerColumn extends Column
{
protected string $view = 'filament.tables.columns.audio-player-column';
}
同时会新建一个视图文件:resources/views/filament/tables/columns/audio-player-column.blade.php
NOTE
Filament 表格列 不是 Livewire 组件。在表格 Column 类中定义 public 属性,不会让这些属性在 Blade 视图可访问。
在 Blade 视图中访问列状态
在 Blade 视图内部,你可以使用 getState()
函数访问列状态:
<div>
{{ $getState() }}
</div>
在 Blade 视图中访问 Eloquent 记录
在 Blade 视图中,你可以使用 $record
变量访问当前表格行的 Eloquent 记录:
<div>
{{ $record->name }}
</div>
在 Blade 视图中访问当前 Livewire 组件
在 Blade 视图中,你可以使用 $this
变量访问当前 Livewire 组件实例:
@php
use Filament\Resources\Users\RelationManagers\ConferencesRelationManager;
@endphp
<div>
@if ($this instanceof ConferencesRelationManager)
You are editing conferences the of a user.
@endif
</div>
在 Blade 视图中访问当前列实例
在 Blade 视图中,你可以使用 $column
变量访问当前列实例。你可以在此对象上调用 public 方法,访问变量中获取不到的信息:
<div>
@if ($column->isLabelHidden())
This is a new conference.
@endif
</div>
添加配置方法到自定义 Column 类
你可以添加 public 方法到自定义 Column 类中,使之接受配置值,并保存到 pretected 属性,并从另一个 public 方法中返回:
use Filament\Tables\Columns\Column;
class AudioPlayerColumn extends Column
{
protected string $view = 'filament.tables.columns.audio-player-column';
protected ?float $speed = null;
public function speed(?float $speed): static
{
$this->speed = $speed;
return $this;
}
public function getSpeed(): ?float
{
return $this->speed;
}
}
现在,在该自定义列的 Blade 视图中,你可以使用 $getSpeed()
函数访问 speed 变量:
<div>
{{ $getSpeed() }}
</div>
任何你在自定义 Column 类中定义的 public 方法,都可以通过这种方式在 Blade 视图以变量函数的方式访问。
use App\Filament\Tables\Columns\AudioPlayerColumn;
AudioPlayerColumn::make('recording')
->speed(0.5)
允许在自定义列配置方法中注入 utility
Utility 注入是 Filament 的一个强大功能,允许用户使用可以访问各种 utility 的函数配置组件。你可以通过确保配置的参数类型和属性类型允许用户传递“闭包”来允许 utility 注入。在 getter 方法中,你应该将配置值传递给 $this->evaluate()
方法,如果用户传递了 utility,它将把 utility 注入到用户的函数中,或者如果它是静态的,则返回值:
use Closure;
use Filament\Tables\Columns\Column;
class AudioPlayerColumn extends Column
{
protected string $view = 'filament.tables.columns.audio-player-column';
protected float | Closure | null $speed = null;
public function speed(float | Closure | null $speed): static
{
$this->speed = $speed;
return $this;
}
public function getSpeed(): ?float
{
return $this->evaluate($this->speed);
}
}
现在,你可以传递一个静态值或者函数给 speed()
方法,并注入任何 utility作为参数:
use App\Filament\Tables\Columns\AudioPlayerColumn;
AudioPlayerColumn::make('recording')
->speed(fn (Conference $record): float => $record->isGlobal() ? 1 : 0.5)
Edit on GitHubStill need help? Join our Discord community or open a GitHub discussion