【问题标题】:Laravel validation 2 different values in a single fieldLaravel 验证单个字段中的 2 个不同值
【发布时间】:2020-04-29 11:48:58
【问题描述】:

我有一个表单,其中包含在单个字段中输入 2 个不同值的字段。

第一个字段由选择选项下拉菜单组成。从第一个字段中选择一个选项后,第一个字段中的值将打印在输入字段上。然后在输入字段中,您需要手动添加或键入另一个值以使其工作。所以输出看起来像这样:

Selected value - Value added manually

所以我的问题是,如果每个字段都为空,我该如何验证字段。

我不知道我在做什么,但这是我迄今为止尝试过的,但它不起作用。

'field' => 'required|in:' . implode(",", Model::values()) . '|unique:table'

这应该是预期的输出:

  • 如果字段值为Selected value - Value added manually,则为Valid。

  • 如果字段值为Selected value -,则应验证输入第二个值。

  • 如果字段值为- Value added manually,则应验证输入第一个值。

我在谷歌上搜索过,但我不确定我应该搜索哪些关键字,但我的标题总结了我最近搜索过的内容,但我没有发现与我相同的问题,但如果有,请链接它下来谢谢。

【问题讨论】:

  • 有什么特别的原因你不只使用两个单独的字段并将它们组合在服务器上吗?另外,it should validate to input the 2nd value. 是什么意思?
  • @Thomas 我的意思是,在单个字段中,应该有第二个值,就像我发布的 Selected value - Value added manually 一样,这是一个以逗号分隔的值。所以这个样本值应该是有效的输出,而不仅仅是这个Selected value - 。你明白我的意思了吗?

标签: php laravel laravel-5


【解决方案1】:

我建议使用两个单独的输入: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 无效”)。如果您不关心这一点,您可以将它们组合成一个规则。

请注意,我还没有实际测试过,但它应该可以工作。

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2023-03-27
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多