我的表单有一个文本框和3个单选按钮。单选按钮指示用户想要使用什么类型的工具,但他需要在库存中有这些工具。有三种类型的工具,每个单选按钮只有在他至少拥有其中一种的情况下才能选择。。我想验证一下他是否真的拥有一个。在下面的示例中,变量$tool1 - 3
包含用户拥有的每个工具的数量。(例如:$tool1 = 1, $tool2 = 3, $tool3 = 0
(在这种情况下,如果用户选择了前两个单选按钮中的一个,则验证应为Ok,因为他拥有所需的工具,但如果他选择了第三个单选按钮,则验证将失败。
字段"tool"包含实际选择的刀具,因此刀具可以是刀具1、刀具2或刀具3。
$tool1;
$tool2;
$tool3;
$data = request()->validate([
'name'=> 'required',
'tool' => 'required',
]);
如何做到这一点?
下面的数据结构你可以做一些不错的技巧,并且应该可以在我了解你的域时获得。
$tools = collect(['tool1' => $tool1, 'tool2' => $tool2, 'tool3' => $tool3]);
查找计数高于0的所有工具,filter()
将删除所有空值,并且由于0==为空。为了验证输入,我们只需要名称,我们通过keys()
获得该名称。
// Should return 'tool1' and 'tool2' in an array from your example
$toolsOwned = $toolsOwned->filter()->keys();
现在我们可以使用In()
验证来检查输入是否正确。
use IlluminateValidationRulesIn;
...
'tool' => ['required', new In($toolsOwned->all())],