Codeigniter 2.0 / Facebook Connect — проблема инициализации класса

#codeigniter #facebook #facebook-graph-api

#codeigniter #Facebook #facebook-graph-api

Вопрос:

Я продолжу и буду чувствовать себя глупо перед всеми, потому что я не могу определить, в чем здесь проблема, хотя я подозреваю, что это будет настоящим стоном. возможно, описание этого что-то подтолкнет меня к размышлениям.

я делаю интеграцию Facebook Connect с CI2.0, основанную на работе этого парня:

http://hitsend.ca/2010/10/facebook-connect-user-authentication-using-the-new-graph-api-in-codeigniter/

который я обновил до 2.0

некоторые релевантные биты кода являются:

config/facebook.php:

 
 $config['facebook_api_key'] = 'xxx';  (it is the ID, not the key, as he misnamed his array key)
 $config['facebook_secret_key'] = 'xxx'; 
  

controllers/fb_login.php

 
    function index() {
        $this->load->library('fb_connect');
  

libraries/fb_connect.php

 
    include(APPPATH.'libraries/facebook/facebook.php');

    class fb_connect {
          ....

        function fb_connect()
        {
            //Using the CodeIgniter object, rather than creating a copy of it
            $this->_obj =amp; get_instance();

            //loading the config paramters for facebook (where we stored our Facebook API and SECRET keys
            $this->_obj->load->config('facebook');
            //make sure the session library is initiated. may have already done this in another method.
            $this->_obj->load->library('session'); 

            $this->_api_key        = $this->_obj->config->item('facebook_api_key');
            $this->_secret_key    = $this->_obj->config->item('facebook_secret_key');

            $this->appkey = $this->_api_key;

            //connect to facebook
            $this->fb = new Facebook(array(
                          'appId'  => $this->_api_key,
                          'secret' => $this->_secret_key,
                          'cookie' => true
                        ));
  

и, наконец, библиотека facebook php:
libraries/facebook/facebook.php

 
  public function __construct($fb_config) {
print_r($fb_config);
    $this->setAppId($fb_config['appId']);
    $this->setApiSecret($fb_config['secret']);
    if (isset($fb_config['cookie'])) {
      $this->setCookieSupport($fb_config['cookie']);
    }

  

Лучший способ, которым я могу описать проблему, — это просто предоставить вам вывод print_r ($ fb_config):

 Array ( [facebook_api_key] => xxx [facebook_secret_key] => xxx)   

и
Сообщение: Неопределенный индекс: AppID
Сообщение: Неопределенный индекс: секретный

facebook __construct() загружается с массивом $config [] конфигурационного файла; понятия не имею, почему он это делает.

Заранее спасибо за любые зацепки или указания на «глупости, которые я натворил»

Ответ №1:

Массив возвращает два ключа: facebook_api_key и facebook_secret_key , в то время как конструктор пытается прочитать ключи appId и secret

Кроме того, используемая вами библиотека может устареть. Текущий источник ( libraries/facebook/facebook.php ), строки 186-88 гласят:

 public function __construct($config) {
    $this->setAppId($config['appId']);
    $this->setApiSecret($config['secret']);
  

Комментарии:

1. да, массив, возвращающий неправильные ключи, был тем, с чем я пытался разобраться. оказывается, более ранняя попытка настроить Facebook Connect все еще была на сервере разработчиков и заключалась в автоматической загрузке библиотеки под названием facebook, которая отличалась от текущей, которую мы используем. эта автозагрузка вызывала новую библиотеку слишком рано. не ясно, почему он использовал массив файла конфигурации, но думаю, мне пришлось бы копаться в основных классах, чтобы разобраться с этим, и не очень заинтересован

Ответ №2:

да, массив, возвращающий неправильные ключи, был тем, с чем я пытался разобраться. оказывается, более ранняя попытка настроить Facebook Connect все еще была на сервере разработчиков и заключалась в автоматической загрузке библиотеки под названием facebook, которая отличалась от текущей, которую мы используем. эта автозагрузка вызывала новую библиотеку слишком рано. не ясно, почему он использовал массив файла конфигурации, но думаю, мне пришлось бы копаться в основных классах, чтобы разобраться с этим, и не очень заинтересован