12

我正在尝试在我的 Symfony 项目中使用 mautic/api-library。我正在使用 Symfony 2.8.9 和 PHP 5.6.14。

我在 composer 和 autoload.php 文件中包含了 api-library 项目。在我的控制器中,我声明了 api-library 类:

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方法通过反射使用实例化:

public function newAuth($parameters = array(), $authMethod = 'OAuth')
{
    $class      = 'Mautic\\Auth\\'.$authMethod;
    $authObject = new $class();

    ...

    return $authObject;
}

根据异常消息,反射没有返回 OAuth 类实例。有谁知道是什么原因造成的?我已经检查过了,我满足了 PHP 和 Symfony 的最低要求。有什么与PHP版本和反射有关的吗?

提前致谢。

4

1 回答 1

1
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();
    }
}
于 2016-08-31T11:48:15.400 回答