0

私は PhalconPHP を初めて使用し、Facebook php-sdk を統合しようとしていますが、アプリのすべてのページで $facebook および $user 変数にアクセスできるようにする方法がわかりません (またはリダイレクト必要に応じて)これまでのところ、ブートストラップ ファイルには以下のものがあります。

  try {

//Register an autoloader
$loader = new \Phalcon\Loader();
$loader->registerDirs(array(
    '../app/controllers/',
    '../app/models/',
    '../app/facebook/'
))->register();

//Create a DI
$di = new Phalcon\DI\FactoryDefault();

//Setting up the view component
$di->set('view', function(){
    $view = new \Phalcon\Mvc\View();
    $view->setViewsDir('../app/views/');
    return $view;
});

//setup facebook
  $config = array();
  $config['appId'] = 'xxxxxxxxxxxxxxxxxxxxxxx';
  $config['secret'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

  $facebook = new Facebook($config);
  Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
  Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
  $user = null;

  try{
    $user = $facebook->getUser();
  }catch(FacebookApiException $e){
    $user =null;
    //echo "FacebookApiException :". $e;
  }

  $di->set('facebook', function() {
    global $facebook; // obviously don't want this here
    return $facebook;
  }, true);

  $di['user'] = $user';
 // $di->set('user', function(){
 //   return $['facebook']->getUser();
//  });
 // $di['facebook']=$facebook;
 // $di['user']=$user;

//Handle the request
$application = new \Phalcon\Mvc\Application($di);

echo $application->handle()->getContent();

} catch(\Phalcon\Exception $e) {
 echo "PhalconException: ", $e->getMessage();
}

これで $facebook 変数にアクセスできるようになりました

 $this->facebook 

コントローラーで、それをビューに渡すことができます。しかし、 set('name',$var); を使用してコントローラーから $user にアクセスできる最良の方法は何ですか? 有効ではないようです。次のようなことをするのが最善ですか

 $di->set('facebook', function(){
      //setup facebook config here
     return new Facebook($config)l
 });

または、これを別の方法で行う必要がありますか?つまり、facebook ユーザーを返す User コンポーネントを作成する必要がありますか?

ここでアプローチに従う必要があります Phalconの一部のコンポーネントへのグローバルアクセスは、以下が有効であることを示唆しているようです

  // Store it in the Di container
  $this->di['config'] = $config;

** 編集

使用して

$di->set('user',function() use($user){
return $user;
});

私が望むものを達成しますが、もしそうなら

$di->set('user', $user);

アクセスできません。実際に何が起こっているのか、誰か説明できますか?

ありがとう

4

3 に答える 3