Ввод запроса на изменение Laravel из строки в массив - PullRequest
0 голосов
/ 11 сентября 2018

Я создаю 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 голосов
/ 13 сентября 2018

, если вы запрашиваете строку так: /?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
)

Я не много тестировал, так что подумай сам.

0 голосов
/ 11 сентября 2018

В Laravel, если ваши параметры похожи на поле [0], поле [1], ...
, вы можете получить его с помощью $request->field, а это массив, так что вы можете проверить

is_array($request->field)

и в вашем случае вы можете проверить это с кодом ниже

is_array($value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...