Using guzzle with CakePHP 2.x


Using guzzle with CakePHP 2.x

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

我需要做的是将 Guzzle 客户端初始化到我的一些控制器,但在将要加载它的控制器上,我需要使用相同的配置加载它。

基本上我不知道的是哪种是实现它的最佳方法。我在想以下几点:

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

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

使用一个特质,只要你不拘泥于古老的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;
    }
}

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

如果您不能使用特征,

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