Передача параметра API в URL laravel/guzzle
У меня есть простой контроллер, который использует 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 ответ
Решение
Существует два пути достижения этого.
- С параметром строки запроса
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'
],
]);
...
}