【问题标题】:Attempted to call an undefined method named "validateAccessToken" when using Mautic api-library in Symfony在 Symfony 中使用 Mautic api-library 时尝试调用名为“validateAccessToken”的未定义方法
【发布时间】:2016-08-26 02:51:44
【问题描述】:

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

查看 mautic ApiAuth 类,newAuth 方法使用反射实例化:

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

    ...

    return $authObject;
}

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

提前致谢。

【问题讨论】:

    标签: php symfony oauth mautic


    【解决方案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();
        }
    }
    

    【讨论】:

    • 你的回答很有道理。但这并没有解决问题。实际上错误消息已更改,但我不确定它是否是解决方案。如果您查看 mautic/api-library 文档 (github.com/mautic/api-library),它会按照我的方式完成,使用 $apiAuth 作为参考。有人有其他想法吗?
    • 我遇到了一个奇怪的错误,但我还看不到日志。我将使用原始 api 代码创建一个全新的应用程序并在此处发布。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多