Я пытаюсь использовать mautic / api-library внутри моего проекта Symfony. Я использую Symfony 2.8.9 с PHP 5.6.14.
Я включил проект библиотеки api в composer и в файл autoload.php. В моем контроллере я объявил классы 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"
Глядя внутрь Маврикия ApiAuth
учебный класс, newAuth
Метод использует инстанцирование путем рефекции:
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();
}
}
Других решений пока нет …