我正在尝试为Chargify设置这个PHP库的Symfony实现https://github.com/johannez/chargify
我有点失去了最佳/正确的方法来设置它。
我认为我需要将Guzzle设置为服务,然后创建一个Chargify工厂并将其添加为服务。
我的问题是,在工厂类中,当我尝试使用Guzzle服务时,我收到致命错误
Fatal error: Using $this when not in object context in /symfony/src/Acme/ChargifyBundle/Factory/ChargifyFactory.php on line 8
这是我的工厂类
<?php
namespace Acme\ChargifyBundle\Factory;
class ChargifyFactory implements ChargifyFactoryInterface
{
public static function build($type)
{
$client = $this->get('chargify.guzzle.client');
$className = 'Chargify\\Controller\\' . ucfirst($type);
if (class_exists($className)) {
return new $className($client);
}
else {
throw new Exception("Invalid controller type given.");
}
}
}
如果看到一些配置很有用,这是我的捆绑服务。
services:
chargify.guzzle.client.curl_auth:
class: %guzzle.plugin.curl_auth.class%
arguments:
api_key: %chargify_api_key%
chargify.guzzle.client:
class: %guzzle.client.class%
tags:
- { name: guzzle.client }
calls:
- [setBaseUrl, [%chargify_domain%]]
- [addSubscriber, [@chargify.guzzle.client.curl_auth]]
argument: %chargify_domain%
chargify.factory:
class: Acme\ChargifyBundle\Factory\ChargifyFactory
arguments:
- ["type"]
chargify.customer:
class: Acme\ChargifyBundle\Controller\CustomerController
factory_class: Acme\ChargifyBundle\Factory\ChargifyFactory
factory_method: build
arguments:
type: "customer"
如何使用
中的工厂中的guzzle客户端$client = $this->get('chargify.guzzle.client');
编辑:
我根据@ alex的答案更改了代码,但我仍然收到错误。我认为这是因为该功能是静态的。我查看了文档,但是我无法看到我可以在没有静态函数的情况下设置工厂,当我摆脱静态时,我会遇到不同的错误。
Runtime Notice: Non-static method Acme\ChargifyBundle\Factory\ChargifyFactory::build() should not be called statically, assuming $this from incompatible context
这是从某些生成的代码抛出的
protected function getChargify_CustomerService()
{
return $this->services['chargify.customer'] = \Acme\ChargifyBundle\Factory\ChargifyFactory::build('customer');
}