【问题标题】: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 中实现这一点?

【问题讨论】:

    标签: php laravel routing 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>
          

          【讨论】:

            猜你喜欢
            • 2015-12-20
            • 1970-01-01
            • 2015-12-06
            • 1970-01-01
            • 1970-01-01
            • 2013-04-23
            • 1970-01-01
            • 2022-07-27
            • 2018-02-18
            相关资源
            最近更新 更多