Laravel 5检查当前url是否与action相匹配

时间:2015-05-24 15:20:47

标签: php laravel routing laravel-5

我目前正在使用{{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中实现这一目标?

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>