2

我正在尝试使用 Composer 在 CodeIgniter 上安装和运行 Facebook SDK。

CodeIgniter 已安装并且运行良好。

通过执行以下操作添加了 Composer 支持:

  • curl -s http://getcomposer.org/installer | php
  • touch composer.json
  • 将要求行添加到composer.json文件 ( "facebook/php-sdk-v4" : "4.0.*")
  • composer update

一切都按计划进行。Composer 创建了一个/vendor文件夹,Facebook SDK 就在那里。

然后,我通过将行添加include_once './vendor/autoload.php';index.php.

此时没有错误。

我现在正在寻找调用 SDK。不过,我似乎无法使用任何 Facebook 类。请参阅下面的尝试和失败的事情......


var_dump(class_exists('Facebook'));节目bool(false)


FacebookSession::setDefaultApplication('app id removed', 'app secret removed');

吐出:

Fatal error: Class 'FacebookSession' not found in /var/sites/***/public_html/application/controllers/welcome.php on line 13


还有一个更完整的例子:

<?php
class Welcome extends CI_Controller {

    use Facebook\FacebookSession;
    use Facebook\FacebookRequest;
    use Facebook\GraphUser;
    use Facebook\FacebookRequestException;

    public function index()
    {           
        FacebookSession::setDefaultApplication('app id removed', 'app secret removed');

    }
}

吐出: Fatal error: Welcome cannot use Facebook\FacebookSession - it is not a trait in /var/sites/***/public_html/application/controllers/welcome.php on line 5

4

1 回答 1

2

您混淆了 USE 语句的位置。您可能会做的是在课外和课前声明来自 FB SDK 的类,而不是在课内。通过在类中使用 Use,您将指向 trait 功能,该功能应该包含在类中。

<?php
class MyClass extends MyBaseClass {
    // this is a namespaced trait inside the class
    // = extend class with trait
    use SomeWhere\Trait; 
}
?>

--

<?php
// this is the declaration of a namespaced class outside of the class    
use SomeWhere\Class; 

class MyClass extends MyBaseClass
{
    public function helloWorld()
    {  
        $c = new Class;
        // ...
    }
}
?>

--

您的代码变为:

<?php
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

class Welcome extends CI_Controller {

    public function index()
    {           
        FacebookSession::setDefaultApplication('app id removed', 'app secret removed');

    }
}
于 2014-07-10T17:52:40.607 回答