Попытка получить многомерный массив в строку запроса - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь построить многомерный массив в строку запроса для запроса API.

    $key = env('GRAPHHOPPER_API_KEY', null);
    $baseUrl = "https://graphhopper.com/api/1/route";

    $formData = [
        'point' => [request()->input('point1'), request()->input('point2')],
        'key' => $key,
    ];
    $queryStr = http_build_query($formData);
    $url = $baseUrl.'?'.$queryStr;

    try {
        $client = new \GuzzleHttp\Client();
        $response = $client->request('GET', $url, [
            \GuzzleHttp\RequestOptions::JSON => $formData
        ]);
        $result = json_decode($response->getBody(), true);

        dd('result', $result);
    }
    catch (\Exception $e)
    {
        return response()->json([
            'status' => 0,
            'message' => $e->getMessage(),
            'trace' => $e->getTrace()
        ]);
    }

Вот как это выглядит, когда я выкидываю:

enter image description here

Ошибка API говорит мне, что он ожидает две точки, поэтому я не собираю собирать строки запроса

Документы: https://docs.graphhopper.com/#tag / Routing-API

Ошибка:

привела к 400 ошибочным ответам на запрос: \ n {\ "message \": \ "Укажите не менее 2 точек \"}

1 Ответ

0 голосов
/ 30 марта 2020

Страница документов , на которую вы ссылались, показывает, как структурировать данные строки запроса (см. Тестовое поле справа)

например

?point=51.131,12.414&point=48.224,3.867 

Итак Есть две «точечные» записи, каждая из которых содержит два элемента данных в формате через запятую.

В то время как у вас есть четыре отдельные переменные «point [x] [y]» в вашей строке запроса. Ваш вывод dd предполагает, что request()->input('point1') и request()->input('point2') сами являются массивами. Итак, у вас есть массив, состоящий из двух дополнительных массивов, а не плоская структура.

Я думаю, вам нужно написать это так:

'point' => [request()->input('point1')[0].",".request()->input('point1')[1], request()->input('point2')[0].","request()->input('point2')[1]]

Попробуйте, я думаю, что это должно сработать или, по крайней мере, приблизить вас к тому месту, где вам нужно.

...