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
しかし、すべてのキーをクラスではなく構成ファイルに転送する方法を知っていますか?