Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel validation在单个字段中有两个不同的值_Php_Laravel_Laravel 5 - Fatal编程技术网

Php Laravel validation在单个字段中有两个不同的值

Php Laravel validation在单个字段中有两个不同的值,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个表单,它有一个字段,在一个字段中输入两个不同的值 第一个字段由选择选项下拉列表组成。从第一个字段中选择选项后,第一个字段中的值将打印在输入字段中。然后在输入字段中,您需要手动添加或键入另一个值以使其正常工作。因此,输出将如下所示: Selected value - Value added manually 因此,我的问题是,如果每个字段都是空的,如何验证该字段 我不知道我在做什么,但这是我迄今为止尝试过的,但它不起作用 'field' => 'required|in:' . im

我有一个表单,它有一个字段,在一个字段中输入两个不同的值

第一个字段由选择选项下拉列表组成。从第一个字段中选择选项后,第一个字段中的值将打印在输入字段中。然后在输入字段中,您需要手动添加或键入另一个值以使其正常工作。因此,输出将如下所示:

Selected value - Value added manually
因此,我的问题是,如果每个字段都是空的,如何验证该字段

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

'field' => 'required|in:' . implode(",", Model::values()) . '|unique:table'
这应该是预期的输出:

  • 如果字段值为
    选定值-手动添加的值
    ,则该值有效

  • 如果字段值为所选值-,则应验证输入第二个值

  • 如果字段值为手动添加的值,则应验证输入第一个值


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

我建议使用两个单独的输入:一个是
选择
,另一个是
输入
“手动增值”。这将简化规则:

'field1' => 'required|in:' . implode(",", Model::values()),
'field2' => 'required',
但是,由于您当前有一个
唯一的
验证规则,我怀疑这就是您将其作为单个字段的原因。在这种情况下,您可以创建一些

验证第一个值是否存在:

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;
验证第一个值是否有效:

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;
验证第二个值是否存在:

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无效”)。如果您不关心这一点,可以将它们合并到一个规则中


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

有什么具体的原因不只是在服务器上使用两个单独的字段并将它们组合在一起吗?还有,你说的
应该验证输入第二个值是什么意思。
?@Thomas我的意思是,在一个字段中,应该有第二个值,就像我发布的一样de>选定值-手动添加的值
,这是一个逗号分隔的值。因此,此示例值应该是有效的输出,而不仅仅是此
选定值-
。您明白我的意思了吗?