我目前正在使用{{action('Namespace\Class@method')}}
生成我的应用网址。如何检查当前页面请求是否映射到当前操作Namespace\Class@method
?
我想做点什么:
<a href="{{action('Namespace\Class@method')}}
@if (currentAction('Namespace\Class@method'))
class="active"
@endif
>Some link</a>
我如何在Laravel 5中实现这一目标?
答案 0 :(得分:9)
此处没有内置方法,但您可以使用Route::currentRouteAction()
检索当前操作名称。不幸的是,此方法将返回完全命名空间的类名。所以你会得到类似的东西:
App\Http\Controllers\FooBarController@method
您可以检查或使用ends_with
之类的内容,这样您就不必指定完整路径:
@if(ends_with(Route::currentRouteAction(), 'FooBarController@method'))
您也可以考虑使用'as' => 'route.name'
命名您的路线。这样您就可以使用:Route::is('route.name')
答案 1 :(得分:6)
Actualy我把它简化为以下代码:
<li class="@if(Route::is('getLogin')) active @endif"><a href="{{URL::route('getLogin')}}">Login</a></li>
假设您已命名路线。首先,这是一个好主意,因为您迁移更改操作的URL而不通过整个项目来更改指向该操作的链接。
答案 2 :(得分:2)
我知道这是旧的,但是值得的。
Laravel有一些built-in helper methods for referring to URLs行动和路线。
<强> action
强>
您的路线文件将如下所示。
Route::get('/funtastic', 'FuntasticController@show');
您的刀片视图将如下所示
<a href="{{action('FuntasticController@show')}}
@if(action('FuntasticController@show') == Request::url())
class="active"
@endif
>Some link</a>
<强> route
强>
如果您使用named routes。
<a href="{{route('namedRoute')}}
@if(route('namedRoute') == Request::url())
class="active"
@endif
>Some link</a>
答案 3 :(得分:1)
这是我没有任何命名路线的方式
<a class="{{ str_contains(request()->url(), '/some-page') ? 'active' : '' }}" href="/some-page">Some Page</a>
这不是一个完美的解决方案,但它适用于大多数情况
答案 4 :(得分:0)
对我来说很好用。
<a class="@if (\Route::current()->getName() == 'device_media') active @endif" href="{{ route('device_media', ['brand_slug'=>$brand->slug, 'slug'=>$device->slug]) }}" > Media</a>