我正在使用自定义查询过滤器构建API,在过滤器中,有一些规则,值不能为空,某些字段必须为数组。
如果提交了空白字段,我已经设法将它们过滤掉,但是我无法将请求输入转换为数组,有没有办法做到这一点?
这是我的代码:
public function removeEmptyFieldsFromRequest($request)
{
$emptyFields = [];
foreach ($request->all() as $name => $value)
{
if (is_null($value)){
$emptyFields[] = $name;
}
$fields = ['transmissions', 'grades', 'colors', 'equipment', 'lots', 'chassis', 'auctions', 'models'];
if (in_array($name, $fields)){
// here need to convert request value from a string into the array
}
}
$request = $request->except($emptyFields);
return $request;
}
我想让此过滤器在不同情况下可用,我知道我可以将输入名称更改为前端的数组
答案 0 :(得分:1)
在Laravel中,如果您的参数类似于field [0],field [1],...
您可以使用$request->field
来获取它,它是数组,因此您可以检查
is_array($request->field)
根据您的情况,您可以使用以下代码进行检查
is_array($value)
答案 1 :(得分:1)
如果您查询字符串是这样的:/?a=1&b=2&a=3&c=1&a=2
。
您可以创建一个函数来解析查询字符串,如下所示:
$uri = explode('?', Request::capture()->getRequestUri());
$queryStringArr = explode('&',$uri[1]);
$params = [];
foreach ($queryStringArr as $item) {
$i = explode('=',$item);
if (!empty($params[$i[0]])){
$params[$i[0]]=array_merge((is_array($params[$i[0]]))?$params[$i[0]]:[$params[$i[0]]],[$i[1]]);
}else{
$params[$i[0]]=$i[1];
}
}
print_r($params);die;
哪个给。
Array
(
[a] => Array
(
[0] => 1
[1] => 3
[2] => 2
)
[b] => 2
[c] => 1
)
我没有做太多测试,所以请自己想一想。