2016-09-02 1 views
4

Laravelに実装したいシナリオがあります。単一のLaravelコードインスタンスを使用してそれぞれのデータベースで複数のWebサイトを構成および実行する方法

私は既にこの種のアプローチをカスタムPHPで実装しています。しかし今回は、すべてのウェブサイトをフレームワーク(Laravel)に移行したいと考えています。

私は異なる地域に複数のドメインを実装しています(Localization)、各ドメインは独自のデータベースを持ち、すべてのデータベーステーブルの構造は同じですが、データが異なるだけです。

ここでは、複数のデータベースを複数のドメインに接続する機能を備えた単一のLaravelコードインスタンスを使用したいと思います。各ドメインには独自のテーマファイルがあります。

は、としましょう:abc.comドメインへのアクセス/ヒットしたとき、私はいくつかのドメイン

1. abc.com and it has database with name of db_abc with theme/template ABC 
2. xyz.com and it has database with name of db_xyz with theme/template XYZ 

を持って、私はABCtheme/templateにDB db_abcと負荷データと接続したいです。 xyz.comがヒット/アクセスされる場合と同様に、データベース接続はdb_xyzで行い、データはtheme/templateXYZファイルにロードする必要があります。

この点で私を助けてください。

ありがとうございます。

+0

同様の質問:http://stackoverflow.com/q/34309584/2815635 – C2486

答えて

1

まず、すべてのドメインを1つのプロジェクトにする必要があります。

Route::group(['domain' => 'abc.com'], function() { 
    Route::get('/', '[email protected]'); 
}); 

あなたがconnection()を使用することができ、複数のデータベースを使用するには:あなたができるルートグループとcatchドメインその後

$users = DB::connection('foo')->select(...); 

を、これらは同様の構造と類似したウェブサイトであれば、私はrecommentたいです単一のDBにデータを保持する(そして、おそらく同じテーブルでも)。

あなたはすべてのサイトで同じルートを使用する場合は、設定ファイルにDBやビューの設定を保持し、ミドルウェアで、現在のドメインをチェックすることもできます

if (strpos(request()->server('HTTP_HOST'), 'abc.com')) { 
    session(['site' => 'abc']); 
} 

としてコンフィグからデータを取得:

$currentDb = config('sites.db')[session('site')]; 
$currentViewsDir = config('sites.views')[session('site')]; 
関連する問題