Laravel Filament Notes

Laravel Filament 使用流水笔记。


[2024-06-12] Select组件通过relationship关联列表

  1. 在编辑表中定义BelongsTo字段,关联到提供列表的表Model。
    1
    2
    3
    4
     public function category(): BelongsTo
    {
    return $this->belongsTo(Category::class, 'category_id', 'id');
    }
  2. 再定义Select组件,使用relationship方法关联进来
    1
    2
    Forms\Components\Select::make('category_id') 
    ->relationship('category', 'name'),
  • 可以通过getOptionLabelFromRecordUsing方法将显示值进行自定义。

[2024-06-12] Select(或Radio)组件的值必须是键名-键值对

  • Select组件指定的值,即使显示值和保存值相同,也必须设置数组的键名-键值对,否则无法正常显示(可能获取到了默认数字键名0,1…无法匹配)
    1
    2
    3
    4
    5
    Forms\Components\Select::make('Country')->options([
    '英国' => '英国',
    '美国' => '美国',
    '德国' => '德国'
    ])

[2024-06-11] Filament中的Tabs

  • Tab::make($name)->label($label),创建时make中的$name参数必须是规范的组件名,而不是标题(显示标题通过label函数指定),指定中文等不规范的命名将导致页面异常并且不可点击。
  • Forms\Components\Section组件则是相反的,它的label()方法并不起作用,标题必须作为make()方法的参数传入。

[2024-01-18] Filament.Table头部按钮

1
2
3
4
$table->headerActions([
ExportAction::make(),
... //创建Action数组
], HeaderActionsPosition::Bottom) //指定对方方式,Bottom为左对齐

[2024-01-18] 创建一个弹出ModalDialog的Action

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tables\Actions\Action::make('sync')
->label(__('Sync'))
->form([
//创建一个选择框
Forms\Components\Select::make('channel_id')
->label(__('Shop'))
->required()
->options(Shop::all()->pluck('Title', 'ChannelId'))
])
->modalWidth(MaxWidth::Small) //指定对话框大小
->action(function (Table $table, array $data) {
//alert($data['channel_id']);
$filter = $table->getFilter('shop');
$filter->modifyQueryUsing(fn (Builder $query) => $query->where(["ChannelId" => $data["channel_id"]])
);

[2024-01-19] 在form中添加按钮

  • 在form中可用的Components并没有按钮组件,而要创建Action并调用->button()实现;

  • 但是,form()方法只接受Forms\Components\组件的数组,直接添加Action实例是不允许的;

  • 正确的做法是,创建一个Actions,并向make方法的参数传入一个数组,在该数组中创建Action:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    ->form([
    ... //其它组件
    Forms\Components\Actions::make([
    Forms\Components\Actions\Action::make('Generate excerpt')
    ->action(function (array $data): void {
    //执行操作
    })
        ])