我想验证数组输入值是否已选择。就我而言,我使用 Laravel Livewire,并且我有动态输入,例如我可以添加新选项,例如大小、颜色。但我不想在两个输入中选择相同的值,就像在两个输入中选择大小一样。基本上,如果在第二个输入中选择相同的值,我想显示它已经选择。
下面的代码是Livewire控制器,
public $i = -1;
public $inputs = [];
public $options = ['Size', 'Color', 'Material', 'Style'];
public $option_name;
function rules()
{
$rules = [];
if ($this->inputs) {
foreach ($this->inputs as $key => $val) {
$rules['option_name.' . $val] = ['required'];
}
return $rules;
}
}
public function addLine($i)
{
$i = $i + 1;
$this->i = $i;
array_push($this->inputs, $i);
}
public function updated($propertyName)
{
if ($this->inputs) {
$this->validateOnly($propertyName);
}
}
下面的代码livewire查看代码,
@forelse ($inputs as $key => $value)
<x-native-select label="Option name" :options="$options" wire:model="option_name.{{ $value }}"/> // I am using livewire-wireui
@empty
@endforelse
<a wire:click="addLine({{ $i }})" class="mt-4 text-sm cursor-pointer">
+ Add another option
</a>
知道如何验证这一点吗?
试试这个,让我看看效果如何。
public function updatedOptionName($selectedOption) {
//You can use laravel collection filter as well depending on how commplicated you want it
$this->options = array_filter($this->options, function ($value) {
return $value != $selectedOption;
}, ARRAY_FILTER_USE_BOTH));
}
上面的函数会过滤掉选中的选项,使得该选项在已经选中的情况下不可用。它可能有点矫枉过正,需要社区的改进。欢迎所有评论。需要注意的一件事是,您可能需要一种重置方法,以防用户决定重新开始。您希望在挂载上设置类似于
public $originalOptions
的内容,然后使用重置函数将 this->options
分配给它。让我知道它是否有效。
有关这些功能的更多信息生命周期挂钩