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

Ozz*_*zzy 9 php routing laravel laravel-5

我目前正在使用我的应用程序URL生成{{action('Namespace\Class@method')}}.如何检查当前页面请求是否映射到当前操作Namespace\Class@method

我想做的事情如下:

<a href="{{action('Namespace\Class@method')}}
  @if (currentAction('Namespace\Class@method'))
    class="active"
  @endif
>Some link</a>
Run Code Online (Sandbox Code Playgroud)

我将如何在Laravel 5中实现这一目标?

luk*_*ter 9

没有内置方法,但您可以使用检索当前操作名称Route::currentRouteAction().不幸的是,此方法将返回完全命名空间的类名.所以你会得到类似的东西:

App\Http\Controllers\FooBarController@method
Run Code Online (Sandbox Code Playgroud)

您可以检查或使用类似的东西,ends_with这样您就不必指定完整路径:

@if(ends_with(Route::currentRouteAction(), 'FooBarController@method'))
Run Code Online (Sandbox Code Playgroud)

您也可以考虑使用命名路由'as' => 'route.name'.这将允许您使用:Route::is('route.name')


小智 7

Actualy我把它简化为以下代码:

 <li class="@if(Route::is('getLogin')) active @endif"><a href="{{URL::route('getLogin')}}">Login</a></li>
Run Code Online (Sandbox Code Playgroud)

假设您已命名路线.首先,这是一个好主意,因为您迁移更改操作的URL而不通过整个项目来更改指向该操作的链接.


who*_*boy 5

我知道这是旧的,但它是值得的。

Laravel 有几个内置的辅助方法用于引用 URL操作和路由。


action

您的路由文件将如下所示。

Route::get('/funtastic', 'FuntasticController@show');
Run Code Online (Sandbox Code Playgroud)

你的刀片视图看起来像这样

<a href="{{action('FuntasticController@show')}}
  @if(action('FuntasticController@show') == Request::url())  
    class="active"
  @endif
>Some link</a>
Run Code Online (Sandbox Code Playgroud)

route

如果您使用命名路由

<a href="{{route('namedRoute')}}
  @if(route('namedRoute') == Request::url()) 
    class="active"
  @endif
>Some link</a>
Run Code Online (Sandbox Code Playgroud)