Hybridauth + композитор: как добавить пользовательских провайдеров
Я конвертирую проект php для использования composer в качестве менеджера зависимостей.
Зависимости загружаются через эту строку в моем основном скрипте.
require 'vendor/autoload.php';
Одна из этих зависимостей - hybridauth (версия 2.9). Поскольку при использовании Composer он выдает ошибки "файл не найден" при поиске файлов пользовательских провайдеров.
Например, мой главный контроллер называет Hybrid следующим образом:
$config_file_path = dirname(__FILE__) .'/hybridauth/config.php';
$hybridauth = new Hybrid_Auth( $config_file_path );
Теперь вот файл конфигурации. Я использую провайдера "Facebooktest". Обратите внимание, что мне пришлось указать путь через [обертку][путь]; ключ массива, чтобы перейти к следующему сообщению об ошибке.
return
array(
"base_url" => WWWROOT."/auth",
"providers" => array(
"Facebook" => array(
"enabled" => true,
"keys" => array("id" => "xxxxxxx", "secret" => "xxxxxxxx"),
"scope" => "email",
"trustForwarded" => false
),
"Facebooktest" => array(
"enabled" => true,
"keys" => array("id" => "xxxxxxx", "secret" => "xxxxxx"),
"scope" => "email",
"trustForwarded" => false,
"wrapper"=> array(
"class"=>'Hybrid_Providers_Facebooktest',
"path"=> './controllers/hybridauth/Hybrid/Providers/Facebooktest.php'
)
)
),
"debug_mode" => false,
"debug_file" => "",
);
Сообщение об ошибке (с трассировкой):
require_once(/path/to/composer-project/vendor/hybridauth/hybridauth/hybridauth/Hybrid/thirdparty/Facebook/autoload.php): failed to open stream: No such file or directory
[vendor/bcosca/fatfree/lib/base.php:2174] Base->error()
[controllers/hybridauth/Hybrid/Providers/Facebooktest.php:61] Base->{closure}()
[controllers/hybridauth/Hybrid/Providers/Facebooktest.php:61] require_once()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Provider_Model.php:99] Hybrid_Providers_Facebooktest->initialize()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Provider_Adapter.php:101] Hybrid_Provider_Model->__construct()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Auth.php:278] Hybrid_Provider_Adapter->factory()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Auth.php:230] Hybrid_Auth::setup()
[controllers/auth-action.get.php:19] Hybrid_Auth::authenticate()
Я нахожу странным, что мне теперь нужно изменить пути внутри проекта vendor / hybridauth /. Это побеждает цель использования менеджера зависимостей. Конечно, я должен делать это неправильно. Вы можете посоветовать?
1 ответ
Проверьте мой ответ на другой вопрос здесь. Если вы недавно установили Hybridauth через composer, вы, вероятно, скачали v2.9.2, которая содержит ошибку в своем классе Facebook, которая заменяет путь вендора с вашего на hybridauth / vendor, вызывая такую проблему.
Я подозреваю, что вы создали этот класс Facebooktest, скопировав их класс Facebook, и поэтому допустили эту ошибку. Либо обновите свою ветку dev и скопируйте этот класс Facebook, либо просто используйте другой класс провайдера в качестве шаблона для своего пользовательского класса провайдера.