Laravel中间件,前缀不起作用

时间:2018-02-05 06:25:38

标签: laravel middleware prefix

目前我正在使用laravel开展一个新项目。对于这个项目,我需要为一组路由添加前缀,并需要使用中间件添加前缀。中间件是 -

public function handle($request, Closure $next)
    {

        $segments = $request->segments();

        if( $request->is('admin/*') ){
            return $next($request);
        }
        array_unshift($segments,'admin');
        return redirect()->to(implode('/',$segments));
    }


我的routes / web.php文件是 -

Route::group(['middleware' => 'admin','prefix' => 'admin'],function(){
    Route::get('segments',function(){
       return request()->segments();
    });
});


但不幸的是,这对我不起作用。如果我不手动添加admin /前缀,则中间件不会强制重定向我。但是,如果我从路由组中删除'prefix' => 'admin',那么它可以工作。我怎么解决这个问题?
抱歉,因为我的英语不好。

1 个答案:

答案 0 :(得分:0)

这种方法不适用于您,因为您只是将中间件应用于admin/*路由。

如果您想将用户从任何非admin/*路由重定向到admin路由,您可以执行此类操作。将此路线添加到web.php

的末尾
Route::get('{param1?}/{param2?}/{param3?}', 'RedirectController@redirectoToAdmin');

创建RedirectController控制器并执行此操作:

public function redirectoToAdmin()
{
    return redirect('admin/' . request()->path());
}

此外,从您显示的路由组中删除admin中间件。