尝试在我的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');
有什么想法吗?提前致谢
答案 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内部相同)
然后,我使用一个帮助类(不是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。
在我的控制器文件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']);
在我的DashboardsController Facebook方法中使用它:
$helper = new \Facebook\FacebookRedirectLoginHelper(Router::url('/', true), $appId, $secret);
请注意\ Facebook \,即FacebookRedirectLoginHelper类的名称空间。如果没有此命名空间,代码可以找到文件,但不能找到文件中的类。