在 Codeigniter 4 中添加 Facebook 库

Adding Facebook Library in Codeigniter 4

我正在为我的项目使用 CI 4,我需要 Facebook 登录来获取我在 fb-JS-sdk 中完成的用户数据,然后我将数据保存到数据库并为该用户启动会话所以貌似是直接用facebook login登录的,不过这里不是重点,

现在登录 Facebook 后,用户将从支付网关捐款,它将被重定向到成功页面,该页面将显示感谢您的付款消息,现在我想在成功页面上添加更多 = 我想 post 在用户的 FB 墙上显示消息“我刚刚在现场捐赠了 foo 原因......废话......”。

我知道我需要 Fb 用户令牌,这是我在从 js-sdk 保存在数据库中的 fb 登录期间已经拥有的。

我是 codeigniter 的新手,不知道如何在我的控制器中添加 facebook 库和 use/initialize。我没有使用作曲家。

所以我将 fb-php-sdk 添加到我的 app/Libraries(从 github 下载)

所以我尝试了:

<?php 
namespace App\Controllers;
use CodeIgniter\Controller;
use App\Libraries\Facebook;

class User extends BaseController {

    public function __construct(){

        helper('url','form');
        
    }

    public function success() {
        require_once ('Libraries/Facebook/autoload.php');
        $fb = new Facebook(); // loads and creates instance
        
        $a = $fb->getDefaultGraphVersion();
        print_r($a);

        $session = session();

        $page = [
            'name' => 'success_payment',
            'title' => $_SESSION['fname']." ".$_SESSION['lname']." Thank You - ".SITENAME,
            'fb_token' => $_SESSION['fb_token'],
        ];

        echo view('templates/header', $page);
        echo view('success_payment'); //this template have success msg for successful payment..thank u and all
        echo view('templates/footer');

    }

}

我遇到错误。

Warning: Uncaught ErrorException: require_once(Libraries/Facebook/autoload.php): failed to open stream: No such file or directory in C:\xampp\htdocs\bb\app\Controllers\User.php:55 Stack trace: #0 C:\xampp\htdocs\bb\app\Controllers\User.php(55): CodeIgniter\Debug\Exceptions->errorHandler(2, 'require_once(Li...', 'C:\xampp\htdocs...', 55, Array) #1 C:\xampp\htdocs\bb\app\Controllers\User.php(55): require_once() #2 C:\xampp\htdocs\bb\system\CodeIgniter.php(918): App\Controllers\User->success() #3 C:\xampp\htdocs\bb\system\CodeIgniter.php(404): CodeIgniter\CodeIgniter->runController(Object(App\Controllers\User)) #4 C:\xampp\htdocs\bb\system\CodeIgniter.php(312): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache), false) #5 C:\xampp\htdocs\bb\public\index.php(45): CodeIgniter\CodeIgniter->run() #6 {main} thrown in C:\xampp\htdocs\bb\app\Controllers\User.php on line 55

Fatal error: App\Controllers\User::success(): Failed opening required 'Libraries/Facebook/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\bb\app\Controllers\User.php on line 55

有人可以指导我如何在 CI4 中集成自定义库吗?? 不好意思不会用composer 英语不好

加载库的最简单方法,特别是在完全支持作曲家的 Codeigniter 4 中使用作曲家。

在你的项目中做一个简单的:

$ composer require facebook/graph-sdk

在那之后你的库将是 auto-loaded 所以你应该声明正确的命名空间以在你的控制器上使用它。

在您不能真正使用 Composer 的情况下,您实际上做对了第一步并将 facebook 库添加到您的 App/Libraries 文件夹或您的 app/third_party 文件夹。但是在这种情况下,您需要在您的自动加载上注册所述库,或者只是在您的控制器上手动加载它。

如果您的 third_party 文件夹中有它,您可以像这样自动加载它:

$classmap = [
    'Facebook' => APPPATH .'third_party/_insertFilenameHere_.php'
];

如果上述方法都没有找到 class,并且 class 没有命名空间,自动加载器将在 /app/Libraries 和 /app/Models 目录中尝试找到文件。

如果您选择将库添加到您的 Libraries 文件夹中,那么您也需要将其添加到您的自动加载中。

$psr4 = [
    'App'         => APPPATH,                // To ensure filters, etc still found,
    APP_NAMESPACE => APPPATH,                // For custom namespace
    'Config'      => APPPATH . 'Config',
    'Libraries'   => APPPATH . 'Libraries'   // Your custom Libraries
];

这样,您 App/Libraries 文件夹中的所有库都可以使用了。

这就是为什么我会使用 third_party 代码而不是库。库文件夹通常用于为您的应用程序构建的 classes,而不是完整的第三方代码。那应该在作曲家包或第三方文件夹中。