【问题标题】:Facebook PHP SDK on Zend Framework 1Zend Framework 1 上的 Facebook PHP SDK
【发布时间】:2014-09-24 22:34:11
【问题描述】:

我花了很多时间尝试将 Facebook PHP SDK (v4) 集成到我在 ZF1 上的网站但没有结果,我尝试了很多我在互联网上找到的东西,所以这是我最后的资源(我不喜欢打扰任何人)。在我对 ZF1 的理解不佳(我正在学习)中,我将 Facebook PHP SDK (v4) 中的“src”文件夹复制到 library/zend/ 文件夹中,导致这个http://imgur.com/ycWoleK,现在在 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”失败 纳入 (include_path='/Applications/MAMP/htdocs/www/testfb/application/../library:/Applications/MAMP/htdocs/www/testfb/library:.:/Applications/MAMP/bin/php/php5.5.10/库/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 的早期版本(那个只有 3 个文件,facebook.php、base_facebook.php 和一个证书)。

有什么建议吗?现在有人在运行这个sdk吗?如何?

非常感谢您的帖子! (对我的英语感到抱歉)

【问题讨论】:

    标签: php facebook facebook-graph-api zend-framework sdk


    【解决方案1】:

    所以我遇到了同样的问题,但出于不同的原因。我会把它作为最后一步。

    1. 将 FB SDK 添加到您的库文件夹中,就像在您下载的 zip 中一样。

    2. 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';
      }
      
    3. 或者,您可以将它添加到 Zend 自动加载器,这可能很奇怪,因为 Facebook 使用 lambda 并且使代码有点难看。此外,如果您的 include_path 上的库上有 FB SDK,您还需要一起删除 file_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_Facebook_Autoloader 以更简洁的方式承载这种丑陋是明智的。必须弄乱它以使其正常工作,使其正确到最后,这是我的观点。你可以使用Zend_Loader_Autoloader_Interface来实现它。

    4. 最后也是非常重要的一点,当您调用 Facebook 课程时,永远不要忘记添加全名。 Facebook\FacebookSession::setDefaultApplication() 不是 FacebookSession::setDefaultApplication()

    有了它,无需编辑任何 Facebook 文件即可工作。希望它能让你的代码更好。编码愉快!

    【讨论】:

    • 我有这个“警告:call_user_func() 期望参数 1 是一个有效的回调,在第 124 行的 /usr/share/php/Zend/Loader/Autoloader.php 中找不到类 'Doctrine' " 使用您的代码时。
    • Bartek Kosa,你在你的系统上使用学说吗?如果不是,则不应将其包含在自动装载机上。 ->pushAutoloader(array('Doctrine', 'autoload'))->pushAutoloader(array('Doctrine_Core', 'modelsAutoload'))
    • CesarScur,我没有使用学说,但为什么在你的例子中?
    • 因为这不仅仅是一个例子。这是我的 Bootstrap.php 代码 =D 虽然只是其中的一部分...
    • 精湛的调查 ;)
    【解决方案2】:

    打开你的类文件Zend_Facebook_Facebook并在下面注释掉,然后尝试:

    //namespace Facebook;
    

    还请记住,如果您将类名 FacebookSession 编辑为 Zend_Facebook_Facebook,那么文件名也应该是 Facebook.php 而不是 FacebookSession.php

    【讨论】:

    • 男人!我没有意识到命名空间!我喜欢你!其作品!非常感谢!
    • 有时会发生 :) 不客气 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多