2016-01-25 119 views
1

我想在CakePHP 2.x应用程序上使用guzzle 6.x在CakePHP 2.x应用程序中使用guzzle和CakePHP 2.x

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

基本上我不知道的是哪个是最好的方法来实现它。我想了解以下信息:

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

回答

0

你真的需要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; 
    } 
} 

如果你需要更改配置或整个插座实现离子你只需要改变它在一个地方没有的开销一个组件。这也可以用于任何课程,而不仅仅是控制器。你要找的东西多少是一个简单的工厂,比如方法,不需要整个控制器。

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

+0

是否有任何方法将Guzzle客户端注册为组件? – gmponos

+1

如果你非常执着于将它用作组件,那么只需将相同的代码应用到组件上,或者创建一个代理来通过魔术__call()方法在组件内炫耀。 – burzum