【问题标题】:Can't get Guzzle working in my Laravel app on Bluemix无法让 Guzzle 在 Bluemix 上的 Laravel 应用程序中工作
【发布时间】:2016-08-29 04:50:07
【问题描述】:

我有一个在 Bluemix 中运行的 PHP 应用程序,我想扩展它以调用 RESTful 服务(Twitter 的洞察力)。由于 PHP 没有内置的方式来调用服务,所以我环顾四周并决定使用 Guzzle。

我从它的 Git 下载了 Guzzle 6.0.2 并将 zip 导入我的 httdocs/vendor 路径并重命名了导入的路径 GuzzleHttp 我更改了我的 buildpack 以获得 PHP 5.5并将 composer.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,还是会自动从 buildpack 中获取?

我是否以正确的方式导入 Guzzle 代码?

为什么它在我的控制器路径中寻找 Guzzle 客户端?

是否有一个很好的 PHP 示例程序可以驱动 Insights for Twitter?我在 Javascript 中找到了一个,但我需要在服务器端运行?

当然,最重要的是,我需要做些什么才能使其正常工作?

我们将不胜感激任何或所有这些问题的答案

【问题讨论】:

  • 如果您对客户端类使用完全限定名称,则需要像 $client = new \GuzzleHttp\Client ... 那样导入,或者如果您从 use GuzzleHttp\Client; 导入 -> $client = new Client ...

标签: php laravel ibm-cloud guzzle


【解决方案1】:
   $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);

【讨论】:

  • 这并不能完全回答问题
【解决方案2】:

自从你添加

use GuzzleHttp\Client;

你必须像这样使用 Guzzle 客户端:

$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 并且您正在尝试使用像 new GuzzleHttp\Client 这样的 Guzzle 客户端

【讨论】:

  • 非常感谢。那是一种享受。看来我有一些阅读要做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多