我正在尝试在CakePHP 2.x应用程序上使用guzzle 6.x。
我需要做的是将Guzzle Client初始化为我的一些控制器,但是在控制器上它将被加载我需要加载相同的配置。
基本上我不知道哪个是实施它的最佳方法。我正在考虑以下事项:
AppController
中创建一个函数来创建并返回Guzzle对象,然后将其保存到AppController
内的受保护属性中吗?也许是像setUpGuzzle()
这样的函数,并在控制器上调用此函数,我需要加载Guzzle Client。$this->HttpClient->client->post()
$this->HttpClient->post()
。答案 0 :(得分:1)
使用特性,只要你没有坚持使用古老的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里面,但是你不能在外面使用它那么继承该控制器的控制器的范围。