laravel 验证数组输入值是否已选中

njthzxwz  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(123)

我想验证数组输入值是否已被选中。在我的情况下,我使用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>

你知道怎么验证吗?

0qx6xfy6

0qx6xfy61#

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

public function updatedOptionName($selectedOption) {
//You can use laravel collection filter as well depending on how commplicated you want it
  array_filter($this->options, function ($value) {
    return $value != $selectedOption;
  }, ARRAY_FILTER_USE_BOTH));
}

上面的函数会过滤掉选中的选项,这样当它已经被选中时就不可用了。它可能有些矫枉过正,需要社区的改进。欢迎所有的评论。需要注意的一点是,如果用户决定重新开始,你可能需要一种重置方法。沿着于public $originalOptions的东西,你想在挂载时设置,然后是一个重置函数,它会给this->options赋值。
有关这些函数的更多信息Lifecycle hooks

相关问题