0

Yii 2.0 プロジェクトでFacebook PHP SDK 5.0拡張機能をセットアップするために、このチュートリアルに従っていました。そして、それは期待どおりに機能しますが、(コントローラーのいずれかで) here 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しかし、すべてのキーをクラスではなく構成ファイルに転送する方法を知っていますか?

4

1 に答える 1

1

問題は、Facebook\Facebook がパブリック プロパティとして $app_id、$app_secret、および $default_graph_version を実装していないことです。そのため、コンポーネントで宣言されたオブジェクトを Yii がビルドするときにパラメータが考慮されません。

これを修正する 1 つの方法は、これらのパブリック プロパティを使用して 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'
    ],

これでうまくいくはずです。

于 2015-10-29T12:07:47.780 に答える