Php 从字符串到数组的Laravel更改请求输入
我正在用自定义查询过滤器构建一个API,在我的过滤器中,有一些规则规定值不能为空,有些字段必须是数组 如果提交了空字段,我已经设法过滤掉了这些字段,但我无法将请求输入转换为数组,有没有办法 这是我的密码:Php 从字符串到数组的Laravel更改请求输入,php,laravel-5,Php,Laravel 5,我正在用自定义查询过滤器构建一个API,在我的过滤器中,有一些规则规定值不能为空,有些字段必须是数组 如果提交了空字段,我已经设法过滤掉了这些字段,但我无法将请求输入转换为数组,有没有办法 这是我的密码: public function removeEmptyFieldsFromRequest($request) { $emptyFields = []; foreach ($request->all() as $name => $value) {
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],…
您可以通过
$request->field
获取它,它是数组,因此您可以进行检查
is_array($request->field)
在您的情况下,您可以使用下面的代码进行检查
is_array($value)
如果查询字符串是这样的:
/?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
)
我没有对它进行过太多测试,所以请自己考虑一下。我尝试“is_数组($request->input($name))”`但是它没有帮助您的查询字符串看起来像这样吗?
?array_field[]=val1&array_field[]=val2
?@CodeZilla不,不幸的是,这就是问题所在。这是API,我不能控制前端,但我可以添加验证,但如果系统自动转换它,它会很酷