2016-11-29 4 views
4

まだLaravelにはまだ新しいImは、基本的なLaracastのいくつかを使って作業しています。今私は最初のララベルプロジェクトを始めていますが、私は最初のパッケージ "Landlord"の使い方について固執しています。基本的に私のアプリケーションではマルチテナントの設定が必要です。私は会社のテーブルとユーザーテーブルを持っています、ユーザーテーブルはcompany_idの列を持っています。ある企業が登録すると、企業が正常に作成され、company_idがそのユーザーに割り当てられます。Laravel Packageの使い方LandLord

私は、家主がマルチテナントアプリケーションを実装する最良の方法だと考えていますので、インストール手順を練ったので、私はそれを自分のアプリに含めました。

ただし、USAGEセクションの最初の行には、 と記載されています。注意:所有者は無国籍です。つまり、addTenant()を呼び出すと、現在の要求のスコープのみが使用されます。

は、あなたがそれ は、リクエストごとに起こるような方法であなたのテナントを追加していることを確認し、あなたが必要とする前に、モデル ミドルウェアやOAuthのようなステートレスな認証方法の一部としてのように、スコープ。

ファサードLandlord::addTenant('tenant_id', 1);を添付する必要があります。

これは私が見落としているかなり単純な答えかもしれませんが、どこでaddTenantを使用するのが最適な場所であり、すべてのコントローラまたはモデルで再宣言する必要がありますか?ユーザーがサインインしたり、ルートで使用したり、ミドルウェアとして使用したりするときに、それを添付する必要がありますか?ミドルウェアの場合は、現在のユーザーからcompany_idを取得してaddTenantと一緒に使用するには、次の正しい点がありますか?

ミドルウェア:

public function handle($request, Closure $next){ 
    $tenantId = Auth::user()->tenant_id; 

    Landlord::addTenant('tenant_id', $tenantId); 

    return $next($request); 
} 

UPDATEここ

私のミドルウェア(MultiTenant.php)がある

<?php 

namespace App\Http\Middleware; 

use Closure; 
use App\User; 
use Illuminate\Support\Facades\Auth; 

class MultiTenant 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 

    public function handle($request, Closure $next) 
    {   
     if (Auth::check()) { 
      $tenantId = Auth::user()->company_id; 

      Landlord::addTenant('company_id', $tenantId); // Different column name, but same concept 
     } 

     return $next($request); 
    } 
} 

マイルート/ web.php

<?php 

/* 
|-------------------------------------------------------------------------- 
| Web Routes 
|-------------------------------------------------------------------------- 
| 
| This file is where you may define all of the routes that are handled 
| by your application. Just tell Laravel the URIs it should respond 
| to using a Closure or controller method. Build something great! 
| 
*/ 

Route::get('/', function() { 
    return view('welcome'); 
}); 

Auth::routes(); 
Route::group(['middleware' => ['multitenant']], function() { 
    Route::get('/home', '[email protected]'); 

    //Clients 
    Route::resource('clients', 'ClientController'); 
}); 

マイClient.phpモデル:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use HipsterJazzbo\Landlord\BelongsToTenants; 

class Client extends Model 
{ 
    use BelongsToTenants; 
    // 
    protected $fillable = [ 
     'organization', 
    ]; 

} 

https://github.com/HipsterJazzbo/Landlord#user-content-usage

+1

テナントのデータを持つすべてのテーブルに 'tenant_id'キーがある場合、それらはグローバルな追加スコープの' WHERE' 'tenant_id = ID'(もちろん' BelongsToTenants'特性を持っています)で照会されます。そして、はい、ミドルウェアはテナントを追加するための最良の場所です、imho –

答えて

3

はただ一つの選択肢が、私はまたmiddlewareルートを行ってきました。私はそれを実装する簡単な方法としてそれを見ました。

私は私のroutes/web.phpファイルにmiddlewareを追加しました:

public function handle($request, Closure $next) 
{   
    if (Auth::check()) { 
     $tenantId = Auth::user()->company_id; 

     Landlord::addTenant('company_id', $tenantId); // Different column name, but same concept 
    } 

    return $next($request); 
} 

その後、私はちょうど私がスコープたいモデルにtraitを追加します:

Route::group(['middleware' => ['landlord']], function() { 
    // Your routes 
}); 

そして、私のlandlord middlewareはこのようになります

use HipsterJazzbo\Landlord\BelongsToTenant; 

class User extends Authenticatable 
{ 
    use BelongsToTenant; 
} 

更新また

、あなたがproviders配列にlandlordを追加したあなたのconfig/app.phpファイルで確認してください:に完了したときに最終的にはその後

'aliases' => [ 

    // ... 
    'Landlord' => HipsterJazzbo\Landlord\Facades\Landlord::class, 
    // ... 
], 

composer dump-autoload

'providers' => [ 
    // ... 
    HipsterJazzbo\Landlord\LandlordServiceProvider::class 
    // ... 
], 

そしてaliases配列へオートローディングをリフレッシュします。

+0

私は正しい方向に向かっていました。私はあなたがここで示唆したすべてを行ったが、私のモデルから「Trait 'HipsterJazzbo \ Landlord \ BelongsToTenant」が見つかりませんでした。何か案は? – Derek

+0

@Derekはい、あなたです! 'app.php'設定ファイルを賃貸人情報で更新しましたか? – camelCase

+0

はい、githubページの設定手順に従っています。私のブートストラップ/ app.phpファイルのスクリーンショットです:http://imgur.com/a/gdtB6 – Derek

関連する問題