我正在尝试使用中间件创建动态路由前缀。
我在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));
}
但是给我错误函数的参数太少...
答案 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 ▶}
}