我有一个表单,该表单的字段将在一个字段中输入2个不同的值。
第一个字段由选择选项下拉列表组成。从第一个字段中选择一个选项后,第一个字段中的值将打印在输入字段上。然后,您需要在输入字段中添加或手动键入另一个值以使其起作用。所以输出看起来像这样:
Selected value - Value added manually
所以我的问题是,如果每个字段都不为空,如何验证该字段。
我不知道我在做什么,但这是到目前为止我尝试过的,但是没有用。
'field' => 'required|in:' . implode(",", Model::values()) . '|unique:table'
这应该是预期的输出:
如果该字段值为Selected value - Value added manually
,则它是有效的。
如果该字段值为Selected value -
,则它应验证输入的第二个值。
如果字段值为- Value added manually
,则它应验证输入的第一个值。
我已经在Google上搜索过,但是我不确定应该搜索哪些关键字,但是我的标题是我最近搜索过的内容的总和,但是我没有发现与我的问题相同的问题,但是如果有,请进行链接谢谢。
答案 0 :(得分:0)
我建议使用两个单独的输入:select
代表“选择的值”和input
代表“手动添加的值”。这将简化规则:
'field1' => 'required|in:' . implode(",", Model::values()),
'field2' => 'required',
但是由于您当前有一个unique
验证规则,所以我怀疑这是您将其作为单个字段的原因。在这种情况下,您可以创建一些custom validation rules。
验证第一个值是否存在:
return false !== strpos($value, '-') && strlen(trim(explode('-', $value)[0])) > 0;
验证第一个值有效:
return in_array($value, Model::values());
验证第二个值是否存在:
return false !== strpos($value, '-') && strlen(trim(explode('-', $value)[1])) > 0;
然后您可以将这些规则添加到链中:
'field' => ['required', new FirstValueExists, new FirstValueValid, new SecondValueExists, 'unique:table'],
我对第一个值有两个规则的原因是允许出现更具体的错误消息(“值1丢失”和“值1无效”)。如果您不在乎,可以将它们合并为一条规则。
请注意,我尚未对此进行实际测试,但是应该可以。