【问题标题】:Facebook PHP SDK 5.0 in Yii 2.0 framework (config file)Yii 2.0 框架中的 Facebook PHP SDK 5.0(配置文件)
【发布时间】:2015-10-29 00:30:15
【问题描述】:

我正在关注this 在我的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"

是否可以将其输入到网络配置文件中,从而避免在每次 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 类吗?

【问题讨论】:

    标签: facebook-graph-api yii2 facebook-php-sdk facebook-graph-api-v2.4 yii2-extension


    【解决方案1】:

    问题在于 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'
        ],
    

    这应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多