Laravel 5.5如何判断当前路由所属的路由组?
判断Laravel 5.5当前路由是否属于guest中间件组的方案
当然可以实现!不用手动维护路由列表,直接通过当前路由的中间件信息就能判断它是否属于guest路由组,下面给你几个实用的方案:
1. 直接在控制器/视图中判断
你可以直接获取当前路由实例,然后检查它的中间件列表里是否包含guest:
// 获取当前路由对象 $currentRoute = request()->route(); // 判断是否属于guest路由组 $isGuestRoute = $currentRoute ? in_array('guest', $currentRoute->middleware()) : false;
在Blade视图里可以直接这样用:
@if(request()->route() && in_array('guest', request()->route()->middleware())) <!-- 这里放你的模态框代码 --> <div class="modal fade show" ...> <!-- 模态框内容 --> </div> @endif
2. 封装成请求宏,使用更优雅
如果你想让代码更简洁,贴近你期望的$request()->currentRoute()->isGuest()那样的调用方式,可以在AppServiceProvider的boot方法里注册一个请求宏:
<?php namespace App\Providers; use Illuminate\Http\Request; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Request::macro('isGuestRoute', function () { $route = $this->route(); return $route && in_array('guest', $route->middleware()); }); } // ... 其他方法 }
注册完成后,你在任何地方(控制器、视图、甚至服务类里)都可以直接调用:
// 控制器里 if (request()->isGuestRoute()) { // 执行相关逻辑 } // Blade视图里 @if(request()->isGuestRoute()) <!-- 模态框代码 --> @endif
原理说明
Laravel的路由组中定义的中间件,会被自动应用到组内的每一条路由上。通过$route->middleware()方法可以获取到当前路由所应用的所有中间件数组,只要这个数组里包含guest,就说明该路由属于你定义的guest路由组——完全不需要手动维护路由列表,非常灵活。
内容的提问来源于stack exchange,提问作者TheRealPapa
相关产品推荐
相关产品推荐

