我正在尝试从我的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
对象为空。通过稍微浏览源代码,我发现该变量(以及许多其他变量)应该是全局存在的。
似乎你必须include
的phpBB/app.php
文件。它创建了所需的大部分对象。
更新:
实际上,您包含了common
文件,它完成了大部分初始设置。也许只是做一个全局
$symfony_request = $phpbb_container->get('symfony_request');
。(我现在不能自己测试,只是抛出一些想法)
(如果可能的话,我会尝试另一个库。我不喜欢那些地球仪。没有人。它使跟踪和调试变得更加困难,正如这个问题所示)
为了能够获得会话请求,您必须确保PhpBB论坛和您的Laravel应用程序使用相同类型的cookie:
- 同一域
- 相同路径
- 相同安全标志
这些设置ok吗?