Не могу заставить Guzzle работать в моем приложении Laravel на Bluemix

У меня есть работающее PHP-приложение, работающее в Bluemix, которое я хочу расширить для вызова службы RESTful (Insights for Twitter). Поскольку в PHP нет встроенного способа вызова сервиса, я осмотрелся и решил использовать Guzzle.

Я загрузил Guzzle 6.0.2 из его Git и импортировал zip в свой путь httdocs/vendor и переименовал импортированный путь GuzzleHttp. Я изменил свой пакет сборки, чтобы получить PHP 5.5 и обновленный композитор. .json в свойство Autoload.psr4 с помощью:

"GuzzleHttp\\": "htdocs/vendor/"

Я повторно развернул свое приложение, и оно все еще работало.

Затем я добавил следующий код в свой MainController.php: после некоторых других применений:

use GuzzleHttp\Client;

а потом позже:

$client = new GuzzleHttp\Client([
// Base URI is used with relative requests
'base_uri' => 'https:myserviceURI.mybluemix.net',
// You can set any number of default request options.
'timeout'  => 2.0,
]);
// Use guzzle to send a GET request to Watson Twitter Insights
 $guzzleresponse = $client->request('GET', '/api/v1/messages/search');

Теперь, когда я повторно развертываю приложение, я получаю:

FatalErrorException in HomeController.php line 100:
Class 'App\Http\Controllers\GuzzleHttp\Client' not found

Я не знаю, почему он ищет в app\Http\Controllers\, но я попытался скопировать папку Guzzle src, которая включает в себя Client.php, туда, переименовал ее в GuzzleHttp, и она по-прежнему терпит неудачу.

Я не эксперт по PHP и не Laravel. Я унаследовал код от команды стажеров, поэтому я не совсем понимаю, как все части сочетаются друг с другом.

У меня есть несколько вопросов:

Мне действительно нужно было установить Guzzle в моем рабочем пространстве, или он будет автоматически загружен из пакета сборки?

Правильно ли я импортировал код Guzzle?

Почему он ищет Guzzle Client на моем пути к контроллерам?

Есть ли хороший образец программы на PHP, который управляет Insights for Twitter? Я нашел один в Javascript, но мне нужно запустить его на стороне сервера?

И, конечно же, самое главное, что мне нужно сделать, чтобы это заработало?

Буду очень признателен за ответы на любой или все эти вопросы


person John Knutson    schedule 03.05.2016    source источник
comment
если вы используете полное имя для клиентского класса, вам нужно импортировать так $client = new \GuzzleHttp\Client ... или если вы импортируете из use GuzzleHttp\Client; -> $client = new Client ...   -  person Tiep Phan    schedule 04.05.2016


Ответы (2)


Поскольку вы добавили

use GuzzleHttp\Client;

Вы должны использовать Guzzle Client следующим образом:

$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'https:myserviceURI.mybluemix.net',
// You can set any number of default request options.
'timeout'  => 2.0,
]);

Он пытается найти клиент Guzzle в пути к контроллерам, вероятно, потому, что пространство имен вашего контроллера App\Http\Controllers, и вы пытаетесь использовать клиент Guzzle, например new GuzzleHttp\Client.

person Seva Kalashnikov    schedule 03.05.2016
comment
Большое тебе спасибо. Это сработало. Похоже, мне есть что почитать. - person John Knutson; 04.05.2016

   $client = new Client(array_merge([
        'base_uri' => 'URL',
        'timeout' => 30.0
    ]), $options);

/если вам нужны параметры/

    $options = array_merge_recursive([
        RequestOptions::AUTH => [
            'Conversation_USERNAME',
            'CONVERSATION_PASSWORD',
        ],
        RequestOptions::HEADERS => [
            'Content-Type' => 'application/json'
        ]
    ], $options);
person Nabaz    schedule 13.03.2017
comment
Это точно не ответ на вопрос - person fragmentedreality; 13.03.2017