You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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() 返回的是路由实例,用实例和字符串比较肯定不会得到正确结果,这就是你代码不生效的原因。

下面是几种正确的判断方式,推荐用第一种:

  1. 通过路由名称判断(最推荐)
    只要你的路由在定义时设置了名称(比如 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变更时不用到处改代码。

  1. 通过路由实例的名称属性判断
    如果一定要用 Route::current() 实例,也可以直接取它的名称来比较:
@if(Route::current()->getName() != 'places.show')
    <td><a href="{{ route('places.display', $order->place->id) }}">{{ $order->place->name }}</a></td>
@endif
  1. 通过控制器动作判断
    如果你的路由是绑定到控制器方法的,也可以用路由动作来判断,但这种方式不如路由名称灵活,因为控制器方法改名的话这里也要跟着改:
@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:08:15