2015-05-24 12 views
8

Aktualnie generuję adresy URL aplikacji przy użyciu adresu {{action('Namespace\[email protected]')}}. Jak sprawdzić, czy bieżące żądanie strony mapuje do bieżącej akcji Namespace\[email protected]?Laravel 5 Sprawdź, czy aktualny adres URL odpowiada akcji

chciałbym zrobić coś takiego:

<a href="{{action('Namespace\[email protected]')}} 
    @if (currentAction('Namespace\[email protected]')) 
    class="active" 
    @endif 
>Some link</a> 

Jak by to osiągnąć w laravel 5?

Odpowiedz

8

Nie ma wbudowanej metody, ale można pobrać bieżącą nazwę akcji za pomocą Route::currentRouteAction(). Niestety ta metoda zwróci nazwę klasy w pełnym zakresie nazw. Więc dostaniesz coś takiego:

App\Http\Controllers\[email protected] 

Można też sprawdzić na to, albo użyć czegoś takiego ends_with więc nie trzeba podać pełną ścieżkę:

@if(ends_with(Route::currentRouteAction(), '[email protected]')) 

Można również rozważ nazwanie swoich tras z 'as' => 'route.name'. To pozwoli ci użyć: Route::is('route.name')

+0

Dziękuję za tym trochę o nazywanie swoich tras. Miałem już swoją nazwę, więc zaoszczędziłem wiele czasu i wysiłku. – Styphon

2

Wiem, że to jest stare, ale za to, co jest warte.

Laravel ma kilka akcji i trasę built-in helper methods for referring to URLs.


action

Plik trasa będzie wyglądać następująco.

Route::get('/funtastic', '[email protected]'); 

Państwa zdanie ostrze będzie wyglądać następująco

<a href="{{action('[email protected]')}} 
    @if(action('[email protected]') == Request::url()) 
    class="active" 
    @endif 
>Some link</a> 

route

Jeśli używasz named routes.

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

właściwie miałem go uprościć do następującego kodu:

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

który zakłada, że ​​masz nazwanych tras. Co jest dobrym pomysłem, ponieważ zmieniasz adres URL działania bez przechodzenia przez cały projekt, aby zmienić linki do tego działania.

0

To jak to zrobić bez żadnych wymienionych trasach

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

nie jest to idealne rozwiązanie, ale działa w większości przypadków