2016-09-23 36 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 
を取得

私はまさに私の問題を指しますが、その問題の解決にはそれがあったそのスレッドで

Laravel conflicting

を掲載されなかったことを、スタックオーバーフロー上のポストを発見した

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

このラインでありますphpBBとLaravelの両方がコンポーザーを使用しているため、クラスをロードするときに競合が発生していたためです。それが本当であるかどうかはわかりません。

しかし、私が$user->session_begin();と呼ぶとき、Laravelは確かにphpBBに影響しています。

+0

laravelでセッション競合が発生しました。SESSION_DRIVERとcookieまたはmemcachedが.envになっています –

答えて

5

私は車輪を再発明しないで、lara-auth-bridgeのようなコード化された拡張子を使用することをお勧めします。登録は、特に右のテーブルに適切な行を挿入するだけで、特にphpBB3には慣れていませんが、新しいアカウントが作成された後でデータベースの変更を見ることができます。

編集:サーバーは、2つのアプリケーションが通信していた500

+0

私はlara authブリッジを見ていますが、追加したユーザーの世話をしています。私が使用しようとしているライブラリには、もっと多くの機能があります。あなたの周りの仕事が私の元の質問に答えることはできませんでした。 – JaChNo

+0

さて、あなたはこの質問でどのライブラリを使用しようとしているかは言及していませんでした。クラッシュするコードを 'try {} catch {}'ブロックにラップしようとしていますか?あなたが提供したコードから何らかの理由で '$ symfony_request'がnullであると仮定することができるので、なぜその変数が初期化されていないのかを調べるべきです。 –

+0

私は、ヘルパーライブラリがあったということを言いました。ユーザーの追加機能が私が望む唯一の機能ではないことを明確にすべきでした。謝罪。しかし問題です。 symfony_requestが初期化されていないということは本当に問題の根源です。私はそれがなぜ初期化されていないのか分かっていれば、残りのイメージングは​​うまくいくでしょう – JaChNo

2

で終わるませんので、あなたは、エラーが登録自体に致命的でない場合にはtry {} catch {}ブロックで問題のあるコードを囲むことができ、私は更新します二度PhpBBは、拡張機能付きでアップグレード可能に書かれています。あなたは、新しいユーザーを作成するためのAPIであるphpBB拡張を開発することができます。

あなたの新しい拡張機能は、あなたのlaravelアプリケーションとフォーラムシステム間のすべての通信にXML-RPC over HTTPを使用します。新しいユーザーに関する情報を受け取ったルートを定義し、phpbbで作成プロセスを分析します。あなたがphpBB/symfonyフレームワークの中にいるので、この方法は簡単です。

laravelアプリケーションでは、APIを呼び出して通信を開始する必要があります。

+0

こんにちは、私はこれが代案だと思いますが、これは私の元の質問には答えません。ありがとう – JaChNo

2

エラーは明らかにsymfony_requestオブジェクトがnullであることを示します。ソースコードを少し閲覧することによって、その変数(および他の多くのもの)がグローバルに存在することが予想されることがわかりました。

includephpBB/app.phpファイルのようです。それは必要なオブジェクトのほとんどを作成します。

更新

実際、初期セットアップのほとんどを行いcommonファイルを含めています。たぶん、ちょうどグローバル

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

を作ることは動作します。


(私はアイデアを投げて、今それを自分自身をテストすることはできません)(可能な場合は、しかし、私は別のライブラリを試してみた。私はそれらのグローバルを好きではありません。誰もしません。それは、ものをトレースしますそして、セッション要求を取得できるようにするには)この質問が示すように、困難

2

をデバッグ、あなたはphpBBのフォーラムとあなたLaravelアプリケーションの両方がクッキーの同じ種類を使用してくださいする必要があります。同じ

  • ドメイン
  • 同じパス
  • 同じsecureフラグ

これらの設定は大丈夫か?

関連する問題