vanesxl
@vanesxl

Почему не видит класс?

Добрый день,
Пытаюсь прикрутить к сайту авторизацию через есиа с использованием OAuth2.0
Нашел на github готовое решение, скачал, залил в корень сайта
Как в документации прописал следующее:
$config = [
   'clientId' => 'INSP03211',
   'redirectUrl' => 'http://my-site.com/response.php',
   'portalUrl' => 'https://esia-portal1.test.gosuslugi.ru/',
   'privateKeyPath' => 'my-site.com.pem',
   'privateKeyPassword' => 'my-site.com',
   'certPath' => 'my-site.com.pem',
   'tmpPath' => 'tmp',
];
$esia = new \esia\OpenId($config);
echo $esia->getUrl();

Изменил все значения на свои, открываю через браузер и он мне выдает следующее:
Fatal error: Class 'esia\OpenId' not found in /var/www/site/www/core/cache/includes/elements/modsnippet/34.include.cache.php on line 29

Тогда я в самом начале своего скрипта прописал так:
include_once $_SERVER['DOCUMENT_ROOT'].'/OpenId.php';

Обновляю страницу, а там теперь:
Fatal error: Class 'esia\exceptions\SignFailException' not found in /var/www/site/www/OpenId.php on line 358

После второй строкой в скрипте я прописал следующее:
include_once $_SERVER['DOCUMENT_ROOT'].'/exceptions/SignFailException.php';

Вновь обновляю страницу, а там:
Fatal error: Class 'esia\exceptions\BaseException' not found in /var/www/site/www/exceptions/SignFailException.php on line 6

Пытаюсь прописать третьей строкой следующее:
include_once $_SERVER['DOCUMENT_ROOT'].'/exceptions/BaseException.php';

при обновлении страницы, ошибка не проходит, что я делаю не так?
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
Decadal
@Decadal
У вас нет файла autoload, я так подозреваю. Ну, вы можете подключить все классы вручную (удачки) или установить зависимость через композер:
composer require --prefer-dist fr05t1k/esia

Используйте менеджер зависимостей для ваших проектов. В репозитории, который вы указали, в инструкции, композер, собственно, единственный предлагаемый метод установки.

Больше инфы:
php.net/manual/ru/language.oop5.autoload.php
https://getcomposer.org/doc/00-intro.md
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
daemonhk
@daemonhk
ПсиХоПат
По поводу автозагрузки (вместо Composer):

function myAutoload ($class) {
    $class=str_replace("\\",DIRECTORY_SEPARATOR,$class);
    include($_SERVER['DOCUMENT_ROOT']."/" . $class . ".php");
}
if (!empty($client)) {
    foreach($client->_classmap as $class){
       spl_autoload_register("myAutoload");
    }
}
//$client - класс, в котором есть зависимости
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы