Zend Framework 1上的Facebook PHP SDK

Zend Framework 1上的Facebook PHP SDK,php,facebook,facebook-graph-api,zend-framework,sdk,Php,Facebook,Facebook Graph Api,Zend Framework,Sdk,我花了很多时间试图将Facebook PHP SDK(v4)集成到我在ZF1上的站点,但没有结果,我也尝试了很多在互联网上找到的东西,所以这是我最后的资源(我不喜欢打扰任何人)。在我对ZF1(我正在学习)理解不足的情况下,我将Facebook PHP SDK(v4)中的'src'文件夹复制到library/zend/文件夹中,结果是,现在在FacebookSession.PHP文件中我更改了这一点 class FacebookSession{ 为此: class Zend_Facebook_F

我花了很多时间试图将Facebook PHP SDK(v4)集成到我在ZF1上的站点,但没有结果,我也尝试了很多在互联网上找到的东西,所以这是我最后的资源(我不喜欢打扰任何人)。在我对ZF1(我正在学习)理解不足的情况下,我将Facebook PHP SDK(v4)中的'src'文件夹复制到library/zend/文件夹中,结果是,现在在FacebookSession.PHP文件中我更改了这一点

class FacebookSession{
为此:

class Zend_Facebook_Facebook{
在我的控制器/索引中,我这样调用

Zend_Facebook_Facebook::setDefaultApplication('YOUR_APP_ID', 'YOUR_APP_SECRET');
这就是我得到的:

警告:include_once(Zend/Facebook/Facebook.php):无法打开流:第141行的/Applications/MAMP/htdocs/www/testfb/library/Zend/Loader.php中没有此类文件或目录

警告:include_once():打开“Zend/Facebook/Facebook.php”失败 包括 (包括_path='/Applications/MAMP/htdocs/www/testfb/application/。/library:/Applications/MAMP/htdocs/www/testfb/library:.:/Applications/MAMP/bin/php/php5.5.10/lib/php') 在上的/Applications/MAMP/htdocs/www/testfb/library/Zend/Loader.php中 第141行

致命错误:在中找不到类“Zend_Facebook_Facebook” /Applications/MAMP/htdocs/www/testfb/application/controllers/IndexController.php 第15行

我不知道我该怎么办!我尝试了很多东西,但都不管用!我找了很多指南,只使用了Facebook SDK的previos版本(只有3个文件,Facebook.php、base_Facebook.php和一个cert)

有什么建议吗?有人正在运行此sdk吗?怎么做


非常感谢您的来信!(和sry关于我的英语)

打开你的班级档案
Zend_Facebook\u Facebook
,在下面一行留言,然后尝试:

//namespace Facebook;

还要记住,如果您将
FacebookSession
的类名编辑为
Zend\u Facebook\u Facebook
,那么文件名也应该是
Facebook.php
,而不是
FacebookSession.php

,因此我遇到了相同的问题,但原因不同。我将指出这是最后一步

  • 在库文件夹中添加FB SDK,方式与下载的zip相同

  • facebook SDK提供了一个文件
    autoload.php
    ,您可以将其添加到引导程序中,如下所示:

    protected function _initAutoload ()
    {
        $this->getApplication()
             ->getAutoloader()
             ->pushAutoloader(array('Doctrine', 'autoload'))
             ->pushAutoloader(array('Doctrine_Core', 'modelsAutoload'));
    
        require_once '/facebook-php-sdk-v4-4.0-dev/autoload.php';
    }
    
  • 或者,你可以将其添加到Zend autoloader,这可能会很奇怪,因为Facebook one使用lambda,使代码有点难看。此外,如果在
    include\u路径
    的lib上有FB SDK,则需要同时删除
    文件_exist()
    。在我的情况下,我是这样做的,然后它就这样结束了:

    protected function _initAutoload ()
    {
        define('FACEBOOK_SDK_V4_SRC_DIR', 'facebook-php-sdk-v4-4.0-dev/src/Facebook/');
        $this->getApplication()
            ->getAutoloader()
            ->pushAutoloader(function ($class)
            {
              // project-specific namespace prefix
              $prefix = 'Facebook\\';
    
              // base directory for the namespace prefix
              $base_dir = defined('FACEBOOK_SDK_V4_SRC_DIR') ? FACEBOOK_SDK_V4_SRC_DIR : __DIR__ . '/src/Facebook/';
    
              // does the class use the namespace prefix?
              $len = strlen($prefix);
              if (strncmp($prefix, $class, $len) !== 0) {
                // no, move to the next registered autoloader
                return false;
              }
    
              // get the relative class name
              $relative_class = substr($class, $len);
    
              // replace the namespace prefix with the base directory, replace namespace
              // separators with directory separators in the relative class name, append
              // with .php
              $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    
                require $file;
                return true;
            })     
            ->pushAutoloader(array('Doctrine', 'autoload'))
            ->pushAutoloader(array('Doctrine_Core', 'modelsAutoload'));
    
    
    }
    
    由于您必须为这种方法提供一个自定义自动加载程序,我认为最好创建一个类
    MyNamespace\u Facebook\u autoloader
    ,以更干净的方式承载这种丑陋。我的观点是,必须把它搞得一团糟,让它工作到底。您可以使用
    Zend\u Loader\u Autoloader\u接口来实现它

  • 最后也是非常重要的一点,当你调用Facebook类时,千万不要忘记添加全名
    Facebook\FacebookSession::setDefaultApplication()
    NOT
    FacebookSession::setDefaultApplication()


  • 这样你就有了它,不需要编辑任何Facebook文件和工作。希望它能让你编写得更好。快乐编码

    伙计!我没有意识到名称空间!我爱你,伙计!这很有效!多谢各位!有时会发生:)不客气:我在使用代码时有这样一个“警告:call_user_func()希望参数1是有效的回调,在/usr/share/php/Zend/Loader/Autoloader.php的第124行中找不到类'doctor'?如果不是,则不应将其包含在自动加载器上<代码>->pushAutoloader(数组(“条令”、“自动加载”)
    ->pushAutoloader(数组(“条令核心”、“模型自动加载”))
    CesarScur,我没有使用条令,但为什么会出现在您的示例中?因为这不仅仅是一个示例。这是我的Bootstrap.php code=D,只是其中的一部分,尽管……极好的调查;)