验证数组输入值是否已选择

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

我想验证数组输入值是否已选择。就我而言,我使用 Laravel Livewire,并且我有动态输入,例如我可以添加新选项,例如大小、颜色。但我不想在两个输入中选择相同的值,就像在两个输入中选择大小一样。基本上,如果在第二个输入中选择相同的值,我想显示它已经选择。

enter image description here

下面的代码是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>

知道如何验证这一点吗?

php laravel laravel-livewire laravel-validation
1个回答
0
投票

试试这个,让我看看效果如何。

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
分配给它。让我知道它是否有效。

有关这些功能的更多信息生命周期挂钩

© www.soinside.com 2019 - 2024. All rights reserved.