2017-06-16 185 views
3

我有一個路線,根據我需要調用適當的控制器的術語。 例如一個路由2控制器 - Laravel

Route::get('/{term}','Usercontroller') 
Route::get('/{term}','brandcontroller') 

我想實現這樣的事情。該術語所保留的是一個名稱(字符串),它基於該字符串屬於用戶表或品牌表。我如何使用Service Container來實現這樣的功能。在決定採用哪條路線之前,根據術語是否屬於USER類,應調用用戶控制器,或者如果屬於品牌類,則應採用品牌控制器路線。 任何幫助將不勝感激。 謝謝

+2

你應該使用另一個URL結構。例如'/ user/{term}',這會讓bug更難以出現,並且會使整個網站的結構更加完整。 – FMashiro

+0

我會建議,你爲什麼不去簡單接近,/ brand/{term} – Ganesh

+0

這只是一個例子,但問題仍然存在,基於我需要決定調用哪個控制器的術語。 –

回答

3

創建中間件IsBrand,&檢查品牌是否存在?

Route::group(['middleware' => 'IsBrand'], function() { 
    Route::get('{term}', 'BrandController'); 
}); 

IsUser也一樣。

Route::group(['middleware' => 'IsUser'], function() { 
    Route::get('{term}', 'UserController'); 
}); 

使用php artisan make:middleware IsBrand來創建中間件。

該命令將在您的app/Http/Middleware目錄中放置一個新的IsBrand類。

<?php 

namespace App\Http\Middleware; 

use Closure; 

class IsBrand 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if (App\Brand::where('brand_name', $term)->count())) { 
      return $next($request); 
     } 
    } 

} 
+0

我認爲你也應該給中間件的例子 –

+0

這是有用的,完全可以工作,但我不想在中間件中訪問數據庫,除了中間件還有什麼方法嗎? –

+0

@MuhammadImran我不知道,夥計。如果您發現,請告訴我。 – Ganesh