Попытка вызвать метод undefined с именем "validateAccessToken" при использовании api-библиотеки Mautic в Symfony

Я пытаюсь использовать mautic/api-library внутри моего проекта Symfony. Я использую Symfony 2.8.9 с PHP 5.6.14.

Я включил проект api-library в композитор и в файл autoload.php. В моем контроллере я объявил классы 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 метод использует экземпляр путем refection:

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

    ...

    return $authObject;
}

Согласно сообщению об исключении, отражение не возвращает экземпляр класса OAuth. Кто-нибудь знает, что вызывает это? Я проверил, и я отвечаю минимальным требованиям для PHP и Symfony. Есть ли что-то, что связано с версией PHP и отражением?

Спасибо заранее.

Ответ 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();
    }
}