Laravel 5.2 - 在中间件请求中获取路由组名称

时间:2017-02-14 16:45:29

标签: php laravel-5.2

我正在开发一个中间件,以便处理客人到保护区的重定向。我有2个登录页面,一个用于前端,另一个用于后端,并希望访客根据他们输入的位置重定向到每个登录页面。我的意思是:

  • 如果访客输入EXCEPT之类的路线,则必须将其重定向至/admin/dashboard
  • 如果访客输入路线/admin/login,则必须将其重定向至/messages

这是我的routes.php

/login

在中间件中,我试图获取路线的组名,但无法找到获得我的方式,如下所示:

Route::get('/', function () {
    return view('inicio');
});

Route::group(['as'=>'clientRoutes', 'middleware'=>'loginSelector'], function(){
    Route::get('/polizas', function () {
        return view('cliente.polizas');
    });
});

Route::group(['as'=>'adminRoutes','prefix'=>'admin', 'middleware'=>'loginSelector'], function(){
    Route::get('/inicio', function () {
        return view('admin.inicio');
    });
    Route::get('/lista', function () {
        return view('admin.lista');
    });
});
Route::get('/admin/login', function () {
    return view('admin.login');
});

如果可以,我如何获取组名进行重定向?或者,如果不可能实现这种重定向?

1 个答案:

答案 0 :(得分:0)

由于@Samsquanch提供的link,我解决了这个问题。

这是中间件代码:

public function handle($request, Closure $next)
{
    $routeName = $request->route()->getName();
    if(strpos($routeName, 'adminRoutes.') === 0){
        if(!Auth::user()){
            return redirect('/admin/login');
        }
    }elseif(strpos($routeName, 'clientRoutes.') === 0){
        if(!Auth::user()){
            return redirect('/login');
        }
    }

    return $next($request);
}

这些是我的路线:

Route::group(['as'=>'clientRoutes.', 'middleware'=>'loginSelector'], function(){
    Route::get('/polizas', function () {
        return view('cliente.polizas');
    });
});

Route::group(['as'=>'adminRoutes.','prefix'=>'admin', 'middleware'=>'loginSelector'], function(){
    Route::get('/inicio', function () {
        return view('admin.inicio');
    });
    Route::get('/lista', function () {
        return view('admin.lista');
    });
});
Route::get('/admin/login', function () {
    return view('admin.login');
});

当我转到网址/admin/lista时,我被重定向到/admin/login,当我到达/polizas时,我被重定向到/login

如果您使用我的解决方案,则必须注意每个登录表单中发生的情况,具体取决于经过身份验证的用户角色。