提交后我有以下输入表格结构:
array:6 [▼
"_method" => "PATCH"
"_token" => "h7hb0yLzdYaFY0I4e1I7CQK7Niq9EqgXFTlramn9"
"candidate" => array:4 [▶]
"languages" => array:3 [▼
0 => "ga"
1 => "no"
2 => "sk"
]
"availabilities" => array:2 [▼
"z" => array:1 [▶]
2 => array:3 [▶]
]
"experiences" => array:3 [▶]
]
我试图验证'供应'数组键,以确保它们对应于数据库中的现有ID:
'availabilities' => 'required|integer|exists:days_of_week,id',
如果我使用此规则它将以主数组为目标,但即使我使用浏览器控制台将id更改为“z”,exists
键也会通过验证。它在integer
规则上失败,因为它也检索了一个数组。如何验证数组键?
following example使用类似的形式结构。但它没有涵盖如何验证员工ID。我看到人们添加了一个'id'键以及'name'和'age',并且有一个针对'id'字段的规则,但它很麻烦。
您可以通过添加自定义验证器来完成此操作。另见:https://laravel.com/docs/5.2/validation#custom-validation-rules。
例如:
\Validator::extend('integer_keys', function($attribute, $value, $parameters, $validator) {
return is_array($value) && count(array_filter(array_keys($value), 'is_string')) === 0;
});
然后,您可以检查输入:
'availabilities' => 'required|array|integer_keys',
在这里找到阵列检查:How to check if PHP array is associative or sequential?
如果您可以控制输入数据结构,我建议将其修改为以下内容:
[
...,
"availabilities" => [
{
"id": "z",
"data" : [0 => "foo"]
},
{
"id": 2,
"data" : [0 => "bar"]
}
]
]
然后调整验证规则,例如对数据库进行验证
public function rules {
return [
'availabilities' => 'filled',
'availabilities.*.id' => 'required|integer|exists:days_of_week,id',
'availabilities.*.data' => 'required|array'
// etc...
];
}