Filament 4中如何为仪表盘页面小部件过滤器设置默认值?
解决Filament 4仪表盘Filters Form中DatePicker默认值无效的问题
在Filament 4的HasFiltersForm特性中,直接给表单组件添加->default()不会生效——因为筛选表单的状态是通过页面属性来管理的,正确做法是通过初始化页面属性设置默认值:
- 添加公共属性存储筛选值
在Dashboard类中定义与DatePicker字段名对应的公共属性:
public ?Carbon $startDate = null; public ?Carbon $endDate = null;
- 在mount方法中初始化默认值
重写页面的mount方法,为属性设置默认值:
use Carbon\Carbon; // ... public function mount(): void { parent::mount(); $this->startDate = Carbon::now()->subWeek(); $this->endDate = Carbon::now()->addWeek(); }
- 调整filtersForm方法
去掉->default()调用,Filament会自动将表单字段与页面属性绑定:
public function filtersForm(Schema $schema): Schema { return $schema ->components([ Section::make() ->schema([ DatePicker::make('startDate'), DatePicker::make('endDate'), ]) ]); }
完整修改后的代码:
use Filament\Forms\Components\DatePicker; use Filament\Pages\Dashboard as BaseDashboard; use Filament\Pages\Dashboard\Concerns\HasFiltersForm; use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; use Carbon\Carbon; class Dashboard extends BaseDashboard { use HasFiltersForm; public ?Carbon $startDate = null; public ?Carbon $endDate = null; public function mount(): void { parent::mount(); $this->startDate = Carbon::now()->subWeek(); $this->endDate = Carbon::now()->addWeek(); } public function filtersForm(Schema $schema): Schema { return $schema ->components([ Section::make() ->schema([ DatePicker::make('startDate'), DatePicker::make('endDate'), ]) ]); } }
原理说明:HasFiltersForm特性会自动将表单字段与页面的公共属性双向绑定,页面挂载时初始化属性值,会自动同步到表单组件中,这是Filament筛选表单的标准状态管理方式,替代了普通表单的->default()方法。
内容的提问来源于stack exchange,提问作者lchristmann
相关产品推荐
相关产品推荐

