首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >YII2.0框架中的FacebookPHPSDK5.0(配置文件)

YII2.0框架中的FacebookPHPSDK5.0(配置文件)
EN

Stack Overflow用户
提问于 2015-10-29 00:30:15
回答 1查看 2.3K关注 0票数 0

我遵循教程,在YII2.0项目中设置FacebookPHPSDK5.0扩展。它按照预期工作,但是每次(在任何控制器中)我都需要使用这里的一些特性( ),我需要创建这样一个实例:

代码语言:javascript
运行
复制
$fb = new Facebook\Facebook([
  'app_id' => '{app-id}',
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.5',
  // . . .
  ]);

然后再用它:

代码语言:javascript
运行
复制
// 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}');

但我不知道这有多实际,在我需要使用的每个动作/控制器中创建一个对象的实例。我希望在配置文件中将此数据作为通用数据添加。所以我尝试了这样的方法:

代码语言:javascript
运行
复制
'components' => [
    .
    .
    'facebook' => [
            'class' => 'Facebook\Facebook',
            'app_id' => '{app-id}',
            'app_secret' => '{app-secret}',
            'default_graph_version' => 'v2.5'
    ],
    .
    .

在后面的操作中,我希望得到这样的值,比如:

代码语言:javascript
运行
复制
$fb = Yii::$app->facebook;

然后做上面提到的所有操作。因此,我想像所有其他扩展名一样泛化配置文件中的值,但是我总是得到错误:

代码语言:javascript
运行
复制
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回复:

我听从了你的建议,结果还是犯了同样的错误。然后,我发现它的作用如下:

代码语言:javascript
运行
复制
<?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
         ]);
    }
}

然后:

代码语言:javascript
运行
复制
'components' => [
    .
    .
    'facebook' => [
            'class' => 'your\namespace\MyFacebook'
    ]

在某种程度上,这是可以接受的解决方案,因为冗余被消除。钥匙不仅在一个地方。

但是,您知道如何将所有键转移到配置文件而不是MyFacebook类吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-29 12:07:47

问题是Facebook\Facebook没有将$app_id、$app_secret和$default_graph_version作为公共属性来实现,因此在Yii构建组件中声明的对象时没有考虑到您的参数。

解决这个问题的一种方法是创建您自己的类,用这些公共属性扩展Facebook,并从它自己的构造函数中正确地调用Facebook\Facebook构造函数。然后将配置指向那个新类:

代码语言:javascript
运行
复制
<?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
         ]);
    }

}

然后:

代码语言:javascript
运行
复制
'components' => [
    .
    .
    'facebook' => [
            'class' => 'your\namespace\MyFacebook',
            'app_id' => '{app-id}',
            'app_secret' => '{app-secret}',
            'default_graph_version' => 'v2.5'
    ],

这应该能起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33403976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档