在Laravel代码中加载phpBB时会发生冲突


Loading phpBB in Laravel code conflicts

我正在尝试从我的Laravel应用程序访问phpBB中的一些功能,这是用于诸如在我的主站和自动登录上注册时添加用户等操作。

PhpBB安装在/public/forums下,我已经更新了.htaccess以允许它。我可以很好地访问和使用它。

我有一个帮助器,它最初是为codeigniter构建的,但应该转换到laravel世界。我将它作为一个助手加载通过将它放在app下,使用

加载它
use App'Helpers'phpBBHelper;

和I这样访问函数

   $ph = new phpBBHelper();
   $ph->addPhpbb3User('dave','password','dave@dave.com');

在我的帮助器的顶部有这个构造函数

public function __construct() {
    // Set the variables scope
    global $phpbb_root_path, $phpEx, $cache, $user, $db, $config, $template, $table_prefix;
    define('IN_PHPBB', TRUE);
    define('FORUM_ROOT_PATH', 'forum/');
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : FORUM_ROOT_PATH;
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    // Include needed files
    include($phpbb_root_path . 'common.' . $phpEx);
    // Initialize phpBB user session
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup();
    // Save user data into $_user variable
    $this->_user = $user;   
}

当我执行代码时,我得到一个服务器500错误

PHP Fatal error:  Call to a member function getScriptName() on null in
/home/ubuntu/workspace/public/forum/phpbb/session.php on line 50

就是这一行

$script_name = $request->escape($symfony_request->getScriptName(), true);

我找到了一个关于堆栈溢出的帖子,确切地提到了我的问题,但该问题的解决方案从未发布过

Laravel冲突

在那个线程中,有人建议,因为phpBB和Laravel都使用composer,所以在加载类时导致冲突。我不确定那是不是真的。

但是当我调用$user->session_begin();时,Laravel肯定会影响phpBB。

我建议不要重新发明轮子,而使用已经编码的扩展,如lara-auth-bridge。注册只是在正确的表中插入正确的行,不太熟悉phpBB3,但是您可以在创建新帐户后看到数据库中的变化。

编辑:如果错误对注册本身不是致命的,那么服务器将不会以500结束,您可以将有问题的代码包围在try {} catch {}块中。

当两个应用程序必须通信时,我更新了两次。PhpBB被编写为可以通过扩展进行升级。您可以开发一个phpBB扩展,它是一个用于创建新用户的API。

您的新扩展使用HTTP上的XML-RPC用于您的laravel应用程序和论坛系统之间的所有通信。您定义了一条路由,它接收有关新用户的信息,然后在phpbb中分析创建过程。这种方法更简单,因为你是在phpBB/symfony框架内。

在您的laravel应用程序中,您必须调用API来启动通信

该错误清楚地表明symfony_request对象为空。通过稍微浏览源代码,我发现该变量(以及许多其他变量)应该是全局存在的。

似乎你必须includephpBB/app.php文件。它创建了所需的大部分对象。

更新:

实际上,您包含了common文件,它完成了大部分初始设置。也许只是做一个全局

$symfony_request = $phpbb_container->get('symfony_request');

。(我现在不能自己测试,只是抛出一些想法)


(如果可能的话,我会尝试另一个库。我不喜欢那些地球仪。没有人。它使跟踪和调试变得更加困难,正如这个问题所示)

为了能够获得会话请求,您必须确保PhpBB论坛和您的Laravel应用程序使用相同类型的cookie:

  • 同一域
  • 相同路径
  • 相同安全标志

这些设置ok吗?