我遵循这教程,在YII2.0项目中设置FacebookPHPSDK5.0扩展。它按照预期工作,但是每次(在任何控制器中)我都需要使用这里的一些特性( 这 ),我需要创建这样一个实例:
$fb = new Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.5',
// . . .
]);
然后再用它:
// Send a GET request
$response = $fb->get('/me');
// Send a POST request
$response = $fb->post('/me/feed', ['message' => 'Foo message']);
// Send a DELETE request
$response = $fb->delete('/{node-id}');
但我不知道这有多实际,在我需要使用的每个动作/控制器中创建一个对象的实例。我希望在配置文件中将此数据作为通用数据添加。所以我尝试了这样的方法:
'components' => [
.
.
'facebook' => [
'class' => 'Facebook\Facebook',
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.5'
],
.
.
在后面的操作中,我希望得到这样的值,比如:
$fb = Yii::$app->facebook;
然后做上面提到的所有操作。因此,我想像所有其他扩展名一样泛化配置文件中的值,但是我总是得到错误:
Facebook\Exceptions\FacebookSDKException
Required "app_id" key not supplied in config and could not find fallback environment variable "FACEBOOK_APP_ID"
是否有可能将其输入到web配置文件中,从而避免在每个Facebook调用之前创建具有相同凭据的对象?
编辑1:
回复@machour回复:
我听从了你的建议,结果还是犯了同样的错误。然后,我发现它的作用如下:
<?php
namespace your\namespace;
use Facebook\Facebook;
class MyFacebook extends Facebook {
public $app_id = '{app-id}';
public $app_secret = '{app-secret}';
public $default_graph_version = 'v2.5';
public function __construct()
{
parent::__construct([
'app_id' => $this->app_id,
'app_secret' => $this->app_secret,
'default_graph_version' => $this->default_graph_version
]);
}
}
然后:
'components' => [
.
.
'facebook' => [
'class' => 'your\namespace\MyFacebook'
]
在某种程度上,这是可以接受的解决方案,因为冗余被消除。钥匙不仅在一个地方。
但是,您知道如何将所有键转移到配置文件而不是MyFacebook
类吗?
发布于 2015-10-29 12:07:47
问题是Facebook\Facebook没有将$app_id、$app_secret和$default_graph_version作为公共属性来实现,因此在Yii构建组件中声明的对象时没有考虑到您的参数。
解决这个问题的一种方法是创建您自己的类,用这些公共属性扩展Facebook,并从它自己的构造函数中正确地调用Facebook\Facebook构造函数。然后将配置指向那个新类:
<?php
namespace your\namespace;
use Facebook\Facebook;
class MyFacebook extends Facebook {
public $app_id;
public $app_secret;
public $default_graph_version;
public function __construct()
{
parent::__construct([
'app_id' => $this->app_id,
'app_secret' => $this->app_secret,
'default_graph_version' => $this->default_graph_version
]);
}
}
然后:
'components' => [
.
.
'facebook' => [
'class' => 'your\namespace\MyFacebook',
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.5'
],
这应该能起作用。
https://stackoverflow.com/questions/33403976
复制相似问题