如何在cakephp 2.4中导入facebook php sdk v4。

时间:2014-07-02 19:52:09

标签: php facebook cakephp sdk

尝试在我的AppController中导入并使用facebook php sdk的FacebookRedirectLoginHelper类,但是找不到类'FacebookRedirectLoginHelper'未找到异常。

App::import('Vendor', 'facebook', array('file' => 'facebook-php-sdk-v4-master' . DS . 'src' . DS . 'Facebook' . DS . 'FacebookRedirectLoginHelper.php'));

$helper = new FacebookRedirectLoginHelper($redirect_url, 'xxxx', 'yyyyy'); 

有什么想法吗?提前致谢

5 个答案:

答案 0 :(得分:1)

我之前遇到过同样的问题,现在就开始工作了,不知道我是否以适当的方式做到了,但是它为我工作。

<强> 1。将它放在AppController中(可以像beforeFilter或代码顶部一样)

<?php App::import("Vendor", "FacebookAuto", array("file" => "facebook-php-sdk-v4-4.0-dev/autoload.php")); ?>

<强> 2。放置&#39;使用&#39;您想要调用facebook类的任何Controller中的关键字

<?php 
use Facebook\FacebookSession; 
use Facebook\FacebookRedirectLoginHelper;
?>

第3。你肯定要用FacebookRedirectLogin Helper

做session_start()

<强> 4。启动您的FacebookSession并准备您的重定向网址,它将很好地运作

<?php
FacebookSession::setDefaultApplication("APP_ID", "SECRET_ID");
$facebookRedirect = Router::url('/controllers/action', true);
$helper = new FacebookRedirectLoginHelper($facebookRedirect);
?>

希望它能解决你的问题!

答案 1 :(得分:1)

我遇到了同样的问题,并尝试了大部分解决方案。最后没有任何效果,因为我指的是错误的构建,我没有告诉CakePHP使用Composer Autoloader。

在我的composer.json中,我改变了: "facebook/php-sdk-v4": "dev-master""facebook/php-sdk-v4" : "4.0.*" 在我的Config/bootstrap.php文件的顶部我添加了

<?php
// Load Composer autoload.
require APP . 'Vendor/autoload.php';

// Remove and re-prepend CakePHP's autoloader as Composer thinks it is the
// most important.
// See: http://goo.gl/kKVJO7
spl_autoload_unregister(array('App', 'load'));
spl_autoload_register(array('App', 'load'), true, true);

在此处找到了正确的作曲家条目:https://developers.facebook.com/docs/php/gettingstarted/4.0.0

在这里找到了CakePHP的作曲家自动加载器:http://book.cakephp.org/2.0/en/installation/advanced-installation.html#installing-cakephp-with-composer

现在我可以在我的应用中的任何地方执行此操作:

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

FacebookSession::setDefaultApplication('app_id', 'app_secret');

希望它有所帮助,并且此问题不会阻止您继续使用Composer。

答案 2 :(得分:0)

我也有这个问题,似乎我无法解决它。 我的工作是在FB SDK V3

使用旧版本

答案 3 :(得分:0)

以下是我的工作方式。

以下是Vendor Dir的目录结构(我的用例在插件中,但总体上与您的应用程序Vendor Dir内部相同)

Here's the directory structure of the Vendor Dir ( My use-case is inside a plugin but all in all the same as if inside your apps vendor dir)

然后,我使用一个帮助类(不是CakePHP Helper,只是一个帮助我的类;-))来包含SDK php文件。

*注意:包含SDK文件的顺序对于避免类声明中的竞争条件非常重要。

然后,您可以看到我如何申请登录网址。

这只是我如何运作的一个简单例子。

然而,你的milage可能会有所不同,应该得到你的滚球

<?php

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;


class FacebookApiHelper {


public static $init = false;

public static function init() {

    if(!self::$init) {

        foreach(array(
                    'GraphObject.php',
                    'FacebookHttpable.php',
                    'FacebookCurlHttpClient.php',
                    'FacebookSDKException.php',
                    'FacebookRequestException.php',
                    'FacebookAuthorizationException.php',
                    'FacebookCanvasLoginHelper.php',
                    'FacebookClientException.php',
                    'FacebookCurl.php',
                    'FacebookJavaScriptLoginHelper.php',
                    'FacebookOtherException.php',
                    'FacebookPageTabHelper.php',
                    'FacebookPermissionException.php',
                    'FacebookRedirectLoginHelper.php',
                    'FacebookRequestException.php',
                    'FacebookRequest.php',
                    'FacebookResponse.php',
                    'FacebookServerException.php',
                    'FacebookSession.php',
                    'FacebookThrottleException.php',
                    'GraphAlbum.php',
                    'GraphLocation.php',
                    'GraphSessionInfo.php',
                    'GraphUser.php',
                    ) 
            as $file) {

            require_once __DIR__ . DS . "/Facebook/{$file}";
        }


        FacebookSession::setDefaultApplication(
            Configure::read("UserManager.FacebookApi.app_id"),
            Configure::read("UserManager.FacebookApi.app_secret")
        );

        self::$init = true;

    }

}

public static function getLoginUrl($callback_url = "/user_manager/login/handle_facebook_login_redirect") {

    self::init();

    $helper = new FacebookRedirectLoginHelper($callback_url);

    return $helper->getLoginUrl();

}



}

答案 4 :(得分:0)

嗨,我无法用你提供的任何回答者解决这个问题,但我在同事的帮助下找到了自己的解决方案。

版本我在这里使用的是:CakePHP 2.3,Facebook PHP SDK 4.0.0,PHP 5.4。

  1. 我从developers.facebook.com下载了Facebook SDK。
  2. 我说     cakephp app / Vendor / FacebookSDK / src中的src文件夹文件。
  3. 在我的控制器文件DashboardController中,我现在包含了 像这样的Facebook SDK:

    App::import('Vendor', 'FacebookRedirectLoginHelper', array('file' => 'FacebookSDK' . DS . 'src' . DS . 'FacebookRedirectLoginHelper.php'));
    App::import('Vendor', 'FacebookSDKException', array('file' => 'FacebookSDK' . DS . 'src' . DS . 'FacebookSDKException.php'));
    App::import('Vendor', 'FacebookSession', array('file' => 'FacebookSDK' . DS . 'src' . DS . 'FacebookSession.php'));
    App::import('Vendor', 'FacebookRequest', ['file' => 'FacebookSDK' . DS . 'src' . DS . 'FacebookRequest.php']);
    App::import('Vendor', 'FacebookRequestException', ['file' => 'FacebookSDK' . DS . 'src' . DS . 'FacebookRequestException.php']);
    
  4. 在我的DashboardsController Facebook方法中使用它:

    $helper = new \Facebook\FacebookRedirectLoginHelper(Router::url('/', true), $appId, $secret);
    

    请注意\ Facebook \,即FacebookRedirectLoginHelper类的名称空间。如果没有此命名空间,代码可以找到文件,但不能找到文件中的类。