2016-09-23 78 views
8

我想從我的Laravel應用程序訪問phpBB中的一些功能,這是爲了在註冊發生在我的主站點和自動登錄時添加用戶等操作。在Laravel代碼衝突中加載phpBB

PhpBB安裝在/public/forums下,我已更新.htaccess以允許它。我能夠訪問和使用它就好了。

我有一個幫手,最初是爲codeigniter構建的,但應該轉化爲laravel世界。我通過將其下的應用程序,加載它使用

use App\Helpers\phpBBHelper; 

加載它作爲一個幫手,我訪問的功能,例如

$ph = new phpBBHelper(); 
    $ph->addPhpbb3User('dave','password','[email protected]'); 

在幫助我頂我有這樣的構造

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 conflicting

在該線程是建議因爲phpBB和Laravel都使用作曲者,所以在加載類時會引起衝突。我不確定這是否屬實。

但是,當我呼叫$user->session_begin();時,Laravel肯定會影響phpBB。

+0

laravel中的會話衝突嘗試SESSION_DRIVER與Cookie或memcached中.env –

回答

5

我會建議不要重新發明車輪並使用已編碼的擴展名,如lara-auth-bridge。註冊只需在正確的表格中插入正確的行,尤其不熟悉phpBB3,但在創建新帳戶後可以看到數據庫中的更改。

編輯:可以圍繞在錯誤不是致命的登記自身情況try {} catch {}塊有問題的代碼,以便在服務器不會與500

+0

我已經看過拉拉認證橋,雖然它確實照顧添加用戶。我試圖使用的庫有更多的功能。雖然你已經提出瞭解決方案並不能回答我原來的問題。 – JaChNo

+0

那麼,你沒有提到你想在問題中使用哪個庫。您可以嘗試將崩潰的代碼包裝在try {} catch {}塊中嗎?從你提供的代碼中,我們只能假設'$ symfony_request'爲空,所以你應該檢查爲什麼這個變量沒有被初始化。 –

+0

我確實提到過有一個幫助程序庫,我應該更清楚地說明添加用戶函數不是我想要的唯一函數。道歉。但問題。至於沒有被初始化的symfony_request真的是問題的根源。如果我知道爲什麼沒有被初始化,我會對解決方案的其餘部分進行映像工作 – JaChNo

2

當兩個應用程序不得不通信結束了,我更新兩次。 PhpBB被寫爲可擴展升級。你可以開發一個phpBB擴展,它是一個創建新用戶的API。

您的新擴展使用XML-RPC over HTTP進行laravel應用程序和論壇系統之間的所有通信。您可以定義一條接收有關新用戶信息的路線,然後分析phpbb中的創建過程。這種方式更容易,因爲你在phpBB/symfony框架內。

在你的laravel應用程序中,你必須調用API來啓動通信。

+0

嗨,我想這是一個替代方案,但這並不能回答我原來的問題。謝謝 – JaChNo

2

錯誤清楚地表明symfony_request對象爲空。通過瀏覽源代碼,我發現該變量(以及其他許多變量)預計將在全球範圍內存在。

看起來像你必須includephpBB/app.php文件。它創建了大部分所需的對象。

更新

事實上,你包括common文件,該文件確實最初始設置的。也許只是讓全球

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

會工作。 (我現在不能測試它自己,只是拋出想法)


(如果可能的話,不過,我想嘗試另一個庫,我不喜歡那些全局。沒有人做,這讓跟蹤的東西和調試困難,因爲這個問題顯示)

2

爲了能夠獲得會話請求,你必須確保兩個phpBB論壇和您的Laravel應用程序中使用同種的Cookie:

  • 同域名
  • 相同的路徑
  • 相同的安全標誌

難道這些設置是否正確?