我正在按照本教程在我的Yii 2.0 项目中设置Facebook PHP SDK 5.0扩展。它按预期工作,但每次(在任何控制器中)我都需要使用这里的一些功能this,我需要创建一个这样的实例:
$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
类吗?