2017-01-04 48 views
1

我在處理laravel中的路由組時如何將全局範圍添加到路由組中,有點麻煩。我所做的是Laravel路徑組全球範圍

Route::group([ 
    "prefix" => "customer", 
    "namespace" => "Customer", 
    "as" => "Customer.", 
], function() { 
    //make sure only public salons are displayed! 
    \App\Salon::addGlobalScope("public", function(\Illuminate\Database\Eloquent\Builder $builder) { 
     $builder->where("public", 1); 
    }); 

    Route::get("/", "[email protected]")->name("index"); 

    Route::get("/salon/{salon}", "[email protected]")->name("salon.show"); 

}); 

這個想法是我希望公衆查詢被添加到整個組中!這包括在沙龍模型和路由綁定上調用newQuery。這是可能的嗎?假設我是懶惰的,而不是定義一個路由綁定並將範圍添加到每個用戶,我寧願在這裏做,因爲我需要在整個組中的綁定!

感謝提前:)

回答

3

創建一箇中間件添加範圍的路線:

app/Http/Kernel.php

protected $routeMiddleware = [ 
    // Other route middleware 
    'restrict.public' => App\Http\Middleware\AddPublicScope::class 
]; 

在你創建app/Http/Middleware/AddPublicScope.php

namespace App\Http\Middleware; 

use Closure; 
use App\Salon; 
use Illuminate\Database\Eloquent\Builder; 

class AddPublicScope 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     Salon::addGlobalScope('public', function($builder) { 
      $builder->where('public', 1); 
     }); 

     return $next($request); 
    } 
} 

然後在您的路線組定義中:

Route::group([ 
    "prefix" => "customer", 
    "namespace" => "Customer", 
    "middleware" => ['restrict.public'] 
    "as" => "Customer.", 
], function() { 

    Route::get("/", "[email protected]")->name("index"); 

    Route::get("/salon/{salon}", "[email protected]")->name("salon.show"); 

});