web-dev-qa-db-ja.com

Guzzle to HTTPGETをSymfonyで外部APIに使用する

私はSymfonyの開発に不慣れなので、これがばかげた質問であるならすみません。外部APIからJSONデータを取得しようとしています。 Postmanを介してGETリクエストを実行しようとしましたが、JSON形式で正しいデータを取得したので、URLが正しいことがわかりました。

Guzzleを使用して外部APIからJSONデータのセットをHTTPGETするために、次のコードを記述しています。

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Client;

class ScheduleController {

/**
 * @Route("/schedule")
 */

public function getJobs() {
    // Create a client with a base URI
    $client = new GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);
    // Send a request to http://my.api.url/site/67/module/1449/item
    $response = $client->request('GET', 'site/67/module/1449/item');
    dump($response);
}
}

Guzzleクイックスタートガイドにできるだけ近づこうとしています。 このコードから500エラーが発生します:Attempted to load class "Client" from namespace "AppBundle\Controller\GuzzleHttp". Did you forget a "use" statement for e.g. "Symfony\Component\BrowserKit\Client", "Symfony\Component\HttpKernel\Client" or "Symfony\Bundle\FrameworkBundle\Client"?

use GuzzleHttp\Client;の使用ステートメントがあります。何が間違っていますか?これを行う簡単な方法はありますか?

6
Liz

この行:$client = new GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);

する必要があります:

$client = new Client(['base_uri' => 'http://my.api.url/']);

または:

$client = new \GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);

名前空間をインポートしたので、どちらでも機能します。おそらく最初のオプションが必要です。 GuzzleHttp\Client PHPは相対的な名前空間であると考えているため、「AppBundle\Controller\GuzzleHttp\Client」が見つからないと表示されます。

3
Chip Dean

IPアドレスをlocalhost:8087からWindowsのIPアドレス192.168.x.x:8087に設定しました。

それは機能したので、Linuxポート/ Dockerポートなどで何もする必要はありませんでした。