Laravel将请求输入从字符串更改为数组

时间:2018-09-11 10:26:23

标签: php laravel-5

我正在使用自定义查询过滤器构建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;
}

我想让此过滤器在不同情况下可用,我知道我可以将输入名称更改为前端的数组

2 个答案:

答案 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
)

我没有做太多测试,所以请自己想一想。