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' => '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 是不是匹配动作的主要内容,如果未能解决你的问题,请参考以下文章