如何获取动态路由前缀

时间:2019-08-02 15:24:53

标签: laravel routes middleware

我正在尝试使用中间件创建动态路由前缀。

我在web.php中尝试过这样的操作:

Route::group(['prefix' => '{role}', 'middleware'=>'operator'], function() {
    Route::get('/whatever', function() {
        dd('halo');
    });
});

我的操作员中间件:

public function handle($request, Closure $next)
{
    dd(Route::current()->uri());
}

但是当我按下/Admin/whatever时,dd的输出就像这样的"{role}/whatever"。应该像Admin/whatever一样对吗?

所以想法是,当我以Admin身份登录时,我想像这样/Admin/home进行重定向。

编辑: 我也在操作员中间件中尝试过这个:

public function handle($request, Closure $next, $role)
{
    dd($role));
}

但是给我错误函数的参数太少...

2 个答案:

答案 0 :(得分:0)

由于中间件在生命周期中这么早就产生了,因此中间件无法使用这些数据。会话数据不可用,并且在中间件运行之前,路由似乎没有完全形成。您可以使用另一种方法来返回传递给路由的参数。

\Route::getCurrentRoute()->parameters$request->route()->parameters(根据您的偏好)。

这将为您提供所有{key} => value对参数的列表,因此

\Route::getCurrentRoute()->parameters['role']$request->route()->parameters['role']

应为您提供所需的内容。

答案 1 :(得分:-1)

您可以使用以下方法检索参数:

\Illuminate\Support\Facades\Route::current()->role;

或更好:

\Illuminate\Support\Facades\Route::current()->parameter('role');

如果转储Route::current()的内容,则会看到您实际拥有的对象:

dump(Route::current());

导致:

Route {#330 ▼
  +uri: "{role}/whatever"
  +methods: array:2 [▶]
  +action: array:5 [▶]
  +isFallback: false
  +controller: null
  +defaults: []
  +wheres: array:3 [▶]
  +parameters: array:1 [▶]
  +parameterNames: array:1 [▶]
  #originalParameters: array:1 [▶]
  +computedMiddleware: array:2 [▶]
  +compiled: CompiledRoute {#461 ▶}
  #router: Router {#26 ▶}
  #container: Application {#2 ▶}
}