Передача параметра API в URL laravel / guzzle - PullRequest
0 голосов
/ 10 октября 2018

У меня есть простой контроллер, который использует API (OpenWeatherMap) с жадностью и генерирует запрос на получение при входе.Однако я хотел бы, чтобы мой параметр zipcode не был жестко закодирован в базе кода, но мог быть динамическим и вызываться через URL.Пожалуйста, смотрите код ссылки.

Контроллер

<?php

namespace App\Http\Controllers;

use GuzzleHttp\Client;
use Illuminate\Http\Request;

class GuzzleController extends Controller
{
    public  function index()
{

    try {

        $client = new Client([
    // Base URI is used with relative requests
            'base_uri' => 'http://api.openweathermap.org/data/2.5/',
        ]);

        $response = $client->request('GET', 'forecast', [
            'query' => [
                'zip' => '32811',
                'country code' => 'us',
                'APPID' => '02f129190a8736e107260eadce1d781e'

            ],

        ]);

        if($response->getStatusCode() == 200) {
            return $response->getBody()->getContents();

        }
    } catch(Exception $e) {
        echo "Error: " . $e->getMessage();
    }
}
}

Маршрут

Route::get('forecast', 'GuzzleController@index');

1 Ответ

0 голосов
/ 10 октября 2018

Существует два способа достижения этого.

  1. С параметром строки запроса

URL: app.tld/forecast?zip=32811

Ваш контроллер:

public function index(Request $request)
{
    ...

    $response = $client->request('GET', 'forecast', [
        'query' => [
            'zip' => $request->input('zip'),
            'country code' => 'us',
            'APPID' => '02f129190a8736e107260eadce1d781e'
        ],
    ]);

    ...
}
С более хорошими URL:

URL: app.tld/forecast/32811 (32811 - почтовый индекс)

Ваш маршрут:

Route::get('forecast/{zip}', 'GuzzleController@index');

Ваш контроллер:

public function index(string $zip)
{
    ...

    $response = $client->request('GET', 'forecast', [
        'query' => [
            'zip' => $zip,
            'country code' => 'us',
            'APPID' => '02f129190a8736e107260eadce1d781e'
        ],
    ]);

    ...
}
...