Laravel Blade技术问题:获取当前路由及判断路由不等的实现方法
嘿,我来帮你搞定这两个Laravel Blade里的路由问题,分两部分给你讲清楚:
在Laravel Blade中获取当前路由的几种常用方法
- 获取路由名称(最常用):用
Route::currentRouteName()可以直接拿到当前路由的名称,比如你的places.show就是路由名称,这个方法返回字符串,非常适合用来做判断。 - 获取完整路由实例:
Route::current()会返回当前路由的完整实例,你可以从中获取更多细节,比如路由参数、动作等,比如Route::current()->parameters()就能拿到路由上的参数。 - 获取当前URL:如果需要的是当前页面的URL字符串,可以用
url()->current()或者request()->url()。 - 通过请求实例获取路由:
request()->route()同样能拿到当前路由实例,比如request()->route()->getName()也能获取路由名称。
判断当前路由不等于指定路由的正确姿势
先指出你原来代码里的小问题:你写的 Route('places.show') 应该是 route('places.show'),但这其实是用来生成该路由对应的URL字符串的,而 Route::current() 返回的是路由实例,用实例和字符串比较肯定不会得到正确结果,这就是你代码不生效的原因。
下面是几种正确的判断方式,推荐用第一种:
- 通过路由名称判断(最推荐)
只要你的路由在定义时设置了名称(比如Route::get('/places/{place}', [PlaceController::class, 'show'])->name('places.show')),直接用路由名称做判断最稳定,因为路由URL可能会改,但名称一般不会变:
@if(Route::currentRouteName() != 'places.show') <td><a href="{{ route('places.display', $order->place->id) }}">{{ $order->place->name }}</a></td> @endif
顺便提一句,生成URL的时候尽量用 route() 助手函数,而不是硬写路径,这样后续路由URL变更时不用到处改代码。
- 通过路由实例的名称属性判断
如果一定要用Route::current()实例,也可以直接取它的名称来比较:
@if(Route::current()->getName() != 'places.show') <td><a href="{{ route('places.display', $order->place->id) }}">{{ $order->place->name }}</a></td> @endif
- 通过控制器动作判断
如果你的路由是绑定到控制器方法的,也可以用路由动作来判断,但这种方式不如路由名称灵活,因为控制器方法改名的话这里也要跟着改:
@if(Route::currentRouteAction() != 'App\Http\Controllers\PlaceController@show') <td><a href="{{ route('places.display', $order->place->id) }}">{{ $order->place->name }}</a></td> @endif
内容的提问来源于stack exchange,提问作者Fateh Alrabeai
相关产品推荐
相关产品推荐

