将guzzle与CakePHP 2.x结合使用

将guzzle与CakePHP 2.x结合使用,php,cakephp,guzzle,cakephp-2.x,Php,Cakephp,Guzzle,Cakephp 2.x,我正在尝试在CakePHP2.x应用程序上使用 我需要做的是将Guzzle客户端初始化到我的一些控制器上,但在将加载它的控制器上,我需要使用相同的配置加载它 基本上,我不知道哪种方法是实现它的最佳方法。我在想以下几点: 我是否应该在AppController中创建一个函数,该函数将创建并返回一个Guzzle对象,然后将其保存到AppController中受保护的属性中?可能是像setUpGuzzle()这样的函数,并在我需要加载Guzzle客户端的控制器上调用此函数 我是否应该创建一个组件,然后

我正在尝试在CakePHP2.x应用程序上使用

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

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

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

  • 你真的需要狂饮吗?我同意旧的Cake2 HTTP套接字已经过时了,但是是否有一些东西它不能做,需要您添加另一个库

    使用一个trait,只要你不拘泥于一个古老的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;
        }
    }
    
    如果需要更改配置或整个套接字实现,只需在单个位置进行更改,而无需组件的开销。这也可以用于任何类,而不仅仅是控制器。您所寻找的或多或少是一个简单的类似工厂的方法,不需要整个控制器


    如果你不能使用trait,那么你就必须使用一个组件,或者只是将上面的代码不放在trait或组件中,而是直接放在AppController中,但是您将无法在继承该控制器的控制器范围之外使用它。

    是否有任何方法将Guzzle客户端注册为组件?如果您如此痴迷于将其作为组件使用,只需将相同的代码应用于组件,或通过magic \u call()方法在组件内部创建Guzzle代理。