我正在尝试在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"

在mauticApiAuth类中,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();
    }
}

07-26 09:36