Laravel 5 检查当前 url 是不是匹配动作

Posted

技术标签:

【中文标题】Laravel 5 检查当前 url 是不是匹配动作【英文标题】:Laravel 5 check if current url matches actionLaravel 5 检查当前 url 是否匹配动作 【发布时间】:2015-08-06 03:42:46 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

App\Http\Controllers\FooBarController@method

您可以检查或使用 ends_with 之类的内容,因此您不必指定完整路径:

@if(ends_with(Route::currentRouteAction(), 'FooBarController@method'))

您也可以考虑使用'as' =&gt; 'route.name'命名您的路线。这将允许您使用:Route::is('route.name')

【讨论】:

感谢您提供有关命名路线的信息。我已经命名了我的名字,这样节省了我很多时间和精力。【参考方案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】:

其实我把它简化为以下代码:

 <li class="@if(Route::is('getLogin')) active @endif"><a href="URL::route('getLogin')">Login</a></li>

假设您已命名路线。首先这是一个好主意,因为您可以更改操作的 url,而无需通过整个项目来更改指向该操作的链接。

【讨论】:

【参考方案4】:

这就是我在没有任何命名路线的情况下这样做的方式

<a class=" str_contains(request()->url(), '/some-page') ? 'active' : '' " href="/some-page">Some Page</a>

这不是一个完美的解决方案,但它适用于大多数情况

【讨论】:

【参考方案5】:

它非常适合我。

<a class="@if (\Route::current()->getName() == 'device_media') active @endif" href=" route('device_media', ['brand_slug'=>$brand->slug, 'slug'=>$device->slug]) " > Media</a>

【讨论】:

以上是关于Laravel 5 检查当前 url 是不是匹配动作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 检查给定 url 的路由是不是存在于路由中

如何检查文件是不是存在于laravel的url中

使用 Blade 在 Laravel 5 中获取当前 URL 的最后一部分

Dropzone CSRF令牌不匹配Laravel 5

检查 Laravel 5.1 中是不是存在会话密钥?

检查 Laravel 5.5 中是不是存在记录 [关闭]