在 CakePHP 中使用 guzzle 2.x
Using guzzle with CakePHP 2.x
我正在尝试在 CakePHP 2.x 应用程序上使用 guzzle 6.x。
我需要做的是将 Guzzle Client 初始化到我的一些控制器,但在将加载它的控制器上,我需要以相同的配置加载它。
基本上我不知道哪个是实现它的最佳方法。我在考虑以下问题:
- 我可以在
AppController
中创建一个函数来创建和 return 一个 Guzzle 对象,然后将其保存到 AppController
中受保护的 属性 中吗?也许像 setUpGuzzle()
这样的函数,并在我需要加载 Guzzle 客户端的控制器上调用此函数。
- 要不要我创建一个组件,然后将 Guzzle Client 加载到这个组件的 public 属性。然后我可以像这样使用它
$this->HttpClient->client->post()
- 我应该创建一个组件并为每个 Guzzle public 函数编写一个函数吗?所以我会有这样的东西
$this->HttpClient->post()
.
- 事实是我不喜欢以上任何一个,我希望也许有另一种方法可以做到这一点。例如,创建一个在控制器中加载 Guzzle 客户端或在组件集合中加载 Guzzle 客户端的组件。
您真的需要 Guzzle 吗?我同意旧的 Cake2 HTTP 套接字是老式的,但是有什么它不能做的需要你添加另一个库吗?
使用 trait,只要您不拘泥于古老的 php 版本,这是一个干净的解决方案。这里有一些 pseudo-code 可以为您提供高层次的想法:
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;
}
}
如果您需要更改配置或整个套接字实现离子,您只需在一个地方更改它,而无需组件的开销。这也可以用于任何 class,而不仅仅是控制器。您正在寻找的或多或少是一个类似工厂的简单方法,不需要整个控制器。
如果你不能使用一个特征,那么你将不得不使用一个组件,或者只是将上面的代码不放在特征或组件中,而是直接放在你的 AppController 中,但你将无法使用它超出了继承该控制器的控制器的范围。
我正在尝试在 CakePHP 2.x 应用程序上使用 guzzle 6.x。
我需要做的是将 Guzzle Client 初始化到我的一些控制器,但在将加载它的控制器上,我需要以相同的配置加载它。
基本上我不知道哪个是实现它的最佳方法。我在考虑以下问题:
- 我可以在
AppController
中创建一个函数来创建和 return 一个 Guzzle 对象,然后将其保存到AppController
中受保护的 属性 中吗?也许像setUpGuzzle()
这样的函数,并在我需要加载 Guzzle 客户端的控制器上调用此函数。 - 要不要我创建一个组件,然后将 Guzzle Client 加载到这个组件的 public 属性。然后我可以像这样使用它
$this->HttpClient->client->post()
- 我应该创建一个组件并为每个 Guzzle public 函数编写一个函数吗?所以我会有这样的东西
$this->HttpClient->post()
. - 事实是我不喜欢以上任何一个,我希望也许有另一种方法可以做到这一点。例如,创建一个在控制器中加载 Guzzle 客户端或在组件集合中加载 Guzzle 客户端的组件。
您真的需要 Guzzle 吗?我同意旧的 Cake2 HTTP 套接字是老式的,但是有什么它不能做的需要你添加另一个库吗?
使用 trait,只要您不拘泥于古老的 php 版本,这是一个干净的解决方案。这里有一些 pseudo-code 可以为您提供高层次的想法:
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;
}
}
如果您需要更改配置或整个套接字实现离子,您只需在一个地方更改它,而无需组件的开销。这也可以用于任何 class,而不仅仅是控制器。您正在寻找的或多或少是一个类似工厂的简单方法,不需要整个控制器。
如果你不能使用一个特征,那么你将不得不使用一个组件,或者只是将上面的代码不放在特征或组件中,而是直接放在你的 AppController 中,但你将无法使用它超出了继承该控制器的控制器的范围。