我正在尝试在symfony项目中使用mautic/api库。我用的是symfony 2.8.9和php 5.6.14。
我在composer和autoload.php文件中包含了api库项目。在我的控制器中,我声明了api库类:
use Mautic\Auth\ApiAuth;
use Mautic\Auth\OAuth;
并试图从我的Mautic装置中得到一个标记:
$settings = array(
'baseUrl' => 'http://mymauticinstallation.com',
'version' => 'OAuth1a',
'clientKey' => 'myCLientKey',
'clientSecret' => 'mySecretClient',
'callback' => 'https://api.mysymfonyapp.com/'
);
$auth = new ApiAuth();
$auth->newAuth($settings);
if ($auth->validateAccessToken()) {
if ($auth->accessTokenUpdated()) {
$accessTokenData = $auth->getAccessTokenData();
}
}
但当我尝试运行此代码时,我的控制台中出现了以下错误:
request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "validateAccessToken" of class "Mautic\Auth\ApiAuth"
在mautic
ApiAuth
类中,newAuth
方法使用refection实例化:public function newAuth($parameters = array(), $authMethod = 'OAuth')
{
$class = 'Mautic\\Auth\\'.$authMethod;
$authObject = new $class();
...
return $authObject;
}
根据异常消息,反射不返回OAuth类实例。有人知道这是什么原因吗?我已经检查过了,我满足了php和symfony的最低要求。有什么与php版本和反射相关的吗?
提前谢谢。
最佳答案
request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call an undefined method named "validateAccessToken" of class "Mautic\Auth\ApiAuth"
意味着
validateAccessToken
中不存在方法Mautic\Auth\ApiAuth
,实际上它不是在那里定义的,而是在Mautic\Auth\OAuth
中定义的。// Mautic\Auth\ApiAuth
public function newAuth($parameters = array(), $authMethod = 'OAuth')
{
$class = 'Mautic\\Auth\\'.$authMethod;
$authObject = new $class();
...
return $authObject; // <-- it returns an object, use it!
}
所以您遗漏的是将返回的对象存储在一个变量中以使用它
$apiAuth = new ApiAuth();
$auth = $apiAuth->newAuth($settings);
if ($auth->validateAccessToken()) {
if ($auth->accessTokenUpdated()) {
$accessTokenData = $auth->getAccessTokenData();
}
}