Filament:动态隐藏表单输入

问题描述 投票:0回答:1

我正在使用 Filament 和 Laravel,目前我已经获得了这两个字段输入,用于在

form()
方法中选择基于省份字段的城市:

Select::make("meta.employment_state")
        ->label("Province")
        ->getSearchResultsUsing(fn (string $search): array => State::query()->where('name', 'like', "%{$search}%")->limit(10)->pluck('name', 'id')->toArray())
        ->getOptionLabelUsing(fn ($value): ?string => State::find($value)?->name)
        ->afterStateUpdated(function (Set $set) {
            $set('meta.employment_city', null);
        })
        ->live()
        ->searchable()
        ->extraAttributes(['x-data' => '{ selected: false }', 'x-on:change' => 'selected = $event.target.value !== ""'])
        ->dehydrated(false),

    Select::make("meta.employment_city")
        ->label("City")
        ->getSearchResultsUsing(fn (string $search, Get $get): array => City::query()->whereRelation('state', 'id', '=', $get('meta.employment_state'))->where('name', 'like', "%{$search}%")->limit(10)->pluck('name', 'id')->toArray())
        ->getOptionLabelUsing(fn ($value): ?string => City::find($value)?->name)
        ->placeholder('انتخاب کنید')
        ->searchable()
        ->extraAttributes(['x-show' => 'selected', 'x-cloak' => true]),

基本上我想做的是隐藏第二个输入,即城市输入,直到第一个输入被填充。

这必须动态完成,所以我添加了 JS 属性来制作东西,但不起作用,并且仍然显示城市输入,而不需要填写省份输入,这是错误的。

那么如何用 Filament 做到这一点?

php laravel laravel-10 laravel-filament filamentphp
1个回答
0
投票

您不需要添加额外的属性来隐藏字段。您可以使用 Filament 的

visible()
hidden()
(docs) 方法,结合 $get 来获取 Form 状态。像这样的东西应该有效:

Select::make("meta.employment_state")
    ->label("Province")
    ->getSearchResultsUsing(fn (string $search): array => State::query()
        ->where('name', 'like', "%{$search}%")
        ->limit(10)
        ->pluck('name', 'id')
        ->toArray()
    )
    ->getOptionLabelUsing(fn ($value): ?string => State::find($value)?->name)
    ->afterStateUpdated(function (Set $set) {
        $set('meta.employment_city', null);
    })
    ->live()
    ->searchable()
    ->dehydrated(false),

Select::make("meta.employment_city")
    ->label("City")
    ->getSearchResultsUsing(fn (string $search, Get $get): array => City::query()
        ->whereRelation('state', 'id', '=', $get('meta.employment_state'))
        ->where('name', 'like', "%{$search}%")
        ->limit(10)
        ->pluck('name', 'id')
        ->toArray()
    )
    ->getOptionLabelUsing(fn ($value): ?string => City::find($value)?->name)
    ->placeholder('انتخاب کنید')
    ->searchable()
    ->visible(fn (Get $get) => !empty($get('meta.employment_state'))), 
© www.soinside.com 2019 - 2024. All rights reserved.