【问题标题】:Laravel 5.2 - Get route group name in middleware requestLaravel 5.2 - 在中间件请求中获取路由组名称
【发布时间】:2017-07-03 01:35:57
【问题描述】:

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

  • 如果访客进入/admin/dashboard 之类的路线,则必须将其重定向到/admin/login
  • 如果客人进入路线/messages,他们必须被重定向到/login

这是我的 routes.php

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');
});

在中间件中,我试图获取路由的组名,但找不到获取 i 的方法,如下所示:

namespace App\Http\Middleware;

use Closure;

class CustomAuthRedirectMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $grupoRoute = $request->route()->getGroup();
        if($grupoRoute == "adminRoutes"){
            return redirect('/admin/login');
        }else{
            return redirect('/login');
        }

        return $next($request);
    }
}

如果可能的话,我如何使用组名进行重定向?或者如果不可能,如何实现这种重定向?

【问题讨论】:

  • @Samsquanch 非常感谢。将其发布为答案,以便标记为正确并请为您投票。这就是我要找的...
  • 您可以继续发布您如何解决它作为答案,因为我只能猜测。我认为这将是一个更好的解决方案。只需在您的帖子中引用该链接即可。
  • 完美,谢谢!

标签: php laravel-5.2


【解决方案1】:

感谢@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');
});

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2016-08-27
    • 2016-06-15
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多