一个路由2控制器 - Laravel

一个路由2控制器 - Laravel

问题描述:

我有一个路线,根据我需要调用适当的控制器的术语。 例如一个路由2控制器 - Laravel

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

我想实现这样的事情。该术语所保留的是一个名称(字符串),它基于该字符串属于用户表或品牌表。我如何使用Service Container来实现这样的功能。在决定采用哪条路线之前,根据术语是否属于USER类,应调用用户控制器,或者如果属于品牌类,则应采用品牌控制器路线。 任何帮助将不胜感激。 谢谢

+2

你应该使用另一个URL结构。例如'/ user/{term}',这会让bug更难以出现,并且会使整个网站的结构更加完整。 – FMashiro

+0

我会建议,你为什么不去简单接近,/ brand/{term} – Ganesh

+0

这只是一个例子,但问题仍然存在,基于我需要决定调用哪个控制器的术语。 –

创建中间件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