Laravel 5.2 - 在中间件请求中获取路由组名称
Posted
技术标签:
【中文标题】Laravel 5.2 - 在中间件请求中获取路由组名称【英文标题】:Laravel 5.2 - Get route group name in middleware request 【发布时间】: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);
如果可能的话,我如何使用组名进行重定向?或者如果不可能,如何实现这种重定向?
【问题讨论】:
你可以试试这个:***.com/questions/36838177/… @Samsquanch 非常感谢。将其发布为答案,以便标记为正确并请为您投票。这就是我要找的... 您可以继续发布您如何解决它作为答案,因为我只能猜测。我认为这将是一个更好的解决方案。只需在您的帖子中引用该链接即可。 完美,谢谢! 【参考方案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
。
如果您使用我的解决方案,您必须注意每个登录表单中发生的情况,具体取决于经过身份验证的用户角色。
【讨论】:
以上是关于Laravel 5.2 - 在中间件请求中获取路由组名称的主要内容,如果未能解决你的问题,请参考以下文章
在 laravel 5.2 中禁用特定路由的 Web 中间件
Laravel AJAX 请求进入路由 api Vue 错误
如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页