Laravel在一个字段中验证2个不同的值

时间:2020-01-12 15:16:13

标签: php laravel laravel-5

我有一个表单,该表单的字段将在一个字段中输入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上搜索过,但是我不确定应该搜索哪些关键字,但是我的标题是我最近搜索过的内容的总和,但是我没有发现与我的问题相同的问题,但是如果有,请进行链接谢谢。

1 个答案:

答案 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无效”)。如果您不在乎,可以将它们合并为一条规则。

请注意,我尚未对此进行实际测试,但是应该可以。

相关问题