Hybridauth + composer:如何添加自定义提供程序
Hybridauth + composer: how to add custom providers
我正在转换一个 php 项目以使用 composer 作为依赖项管理器。
依赖项是通过我的主脚本中的这一行加载的。
require 'vendor/autoload.php';
其中一个依赖项是 hybridauth(2.9 版)。自从使用 Composer 以来,它在查找自定义提供程序文件时会抛出 'file not found' 错误。
例如,我的主控制器调用 Hybrid 是这样的:
$config_file_path = dirname(__FILE__) .'/hybridauth/config.php';
$hybridauth = new Hybrid_Auth( $config_file_path );
现在,这是配置文件。我使用的提供商是 "Facebooktest"。
请注意,我必须通过 [wrapper][path] 指定路径;获取下一条错误消息的数组键。
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/" 项目中的路径。它违背了使用依赖管理器的目的。当然,我一定做错了。
你能建议吗?
如果您最近通过 composer 安装了 Hybridauth,您可能已经下载了 v2.9.2,它在他们的 Facebook class 中包含一个错误,该错误将您的供应商路径替换为 hybridauth/vendor,从而导致此类问题。
我怀疑您通过复制他们的 Facebook class 创建了 Facebooktest class,因此导致了该错误。要么更新到他们的开发分支并复制那个 Facebook class,要么简单地使用其他提供商 class 作为您的自定义提供商 class.
的模板
我正在转换一个 php 项目以使用 composer 作为依赖项管理器。
依赖项是通过我的主脚本中的这一行加载的。
require 'vendor/autoload.php';
其中一个依赖项是 hybridauth(2.9 版)。自从使用 Composer 以来,它在查找自定义提供程序文件时会抛出 'file not found' 错误。
例如,我的主控制器调用 Hybrid 是这样的:
$config_file_path = dirname(__FILE__) .'/hybridauth/config.php';
$hybridauth = new Hybrid_Auth( $config_file_path );
现在,这是配置文件。我使用的提供商是 "Facebooktest"。 请注意,我必须通过 [wrapper][path] 指定路径;获取下一条错误消息的数组键。
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/" 项目中的路径。它违背了使用依赖管理器的目的。当然,我一定做错了。 你能建议吗?
我怀疑您通过复制他们的 Facebook class 创建了 Facebooktest class,因此导致了该错误。要么更新到他们的开发分支并复制那个 Facebook class,要么简单地使用其他提供商 class 作为您的自定义提供商 class.
的模板