$request
{ "input1":"50" , "input2":"0" , "input3":"60000" }
$validkeys
{ "input1" , "input2" , "input3", "input4", "input5" }
$request->only($validkeys)
[额外的键可以将之前的值更改为null]
{ "input1":"50" , "input2":"0" , "input3":"60000" , "input4":null , "input5":null }
$request->intersect($validkeys)
[删除值为0
]的键
{ "input1":"50" , "input3":"60000" }
我想要的只是$request
验证。
答案 0 :(得分:2)
我认为这个更短
$validated = array_intersect_key($request->all(), array_flip($validkeys));
答案 1 :(得分:1)
这可能对你的情况有所帮助。此代码使用请求only
方法获取请求密钥,然后将其置于集合中,使用$value !== null
对其进行过滤,以便0
仍然存在。
// Put request values into collection
$valid = collect($request->only('input1', 'input2', 'input3'));
// Filter values
$valid = $valid->filter(function ($value) {
return $value !== null;
});
// We get it back as an array
$valid = $valid->all();
答案 2 :(得分:0)
实现这一目标的另一种方法是:
$requestValidKeys = $request->keys()->intersect($validkeys);
$requestValid = $request->only($requestValidKeys);
所以基本上你只交叉键。使用这些有效密钥,您可以拨打only()
。
答案 3 :(得分:0)
另一个选择是使用集合过滤$request
,这可以使这个读取比数组翻转/交叉更清晰:
collect($request->all())->filter(function ($_, $key) {
return collect($validKeys)->contains($key);
});