与CakePHP 2.x一起使用gu

时间:2016-01-25 14:01:09

标签: php cakephp guzzle cakephp-2.x

我正在尝试在CakePHP 2.x应用程序上使用guzzle 6.x

我需要做的是将Guzzle Client初始化为我的一些控制器,但是在控制器上它将被加载我需要加载相同的配置。

基本上我不知道哪个是实施它的最佳方法。我正在考虑以下事项:

  1. 我应该在AppController中创建一个函数来创建并返回Guzzle对象,然后将其保存到AppController内的受保护属性中吗?也许是像setUpGuzzle()这样的函数,并在控制器上调用此函数,我需要加载Guzzle Client。
  2. 我应该创建一个组件,然后将Guzzle Client加载到该组件的公共属性中。然后我可以像$this->HttpClient->client->post()
  3. 一样使用它
  4. 我应该为每个Guzzle公共功能创建一个组件并编写一个函数吗?所以我会有这样的事情$this->HttpClient->post()
  5. 我不喜欢上述任何一种情况,我正在跳跃,也许还有另一种方法可以做到这一点。例如,创建一个组件,用于在控制器中加载Guzzle Client或在组件集合中加载Guzzle Client。

1 个答案:

答案 0 :(得分:1)

你真的需要Guzzle吗?我同意旧的Cake2 HTTP套接字是老式的,但它有什么不能做的,需要你添加另一个lib?

使用特性,只要你没有坚持使用古老的php版本,这是一个干净的解决方案。这里有一些伪代码可以为您提供高级别的想法:

trait HttpSocket {
    protected $_httpSocket = null;
    protected $_httpSocketConfig = [
        // Default config goes here
    ];
    public function getHttpSocket() {
        if (empty($this->_httpSocket)) {
            // Not sure how the constructur works, so it's just an example
            $this->_httpSocket = new Guzzle($this->_httpSocketConfig);
        }
        return $this->_httpSocket;
    }
}

如果您需要更改配置或整个套接字实现,您只需在一个地方更改它,而无需组件的开销。这也适用于任何类,而不仅仅是控制器。您正在寻找的是或多或少的简单工厂方法,不需要整个控制器。

如果你不能使用特性那么你将不得不使用一个组件或者只是将上面的代码放在特征中,而不是直接放在你的AppController里面,但是你不能在外面使用它那么继承该控制器的控制器的范围。