2015-05-24 9 views
8

Attualmente sto generando gli URL delle mie applicazioni utilizzando {{action('Namespace\[email protected]')}}. Come dovrei controllare se la richiesta di pagina corrente è mappata all'azione corrente Namespace\[email protected]?Laravel 5 verifica se l'url corrente corrisponde all'azione

mi piacerebbe fare qualcosa di simile:

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

Come potrei raggiungere questo obiettivo in laravel 5?

risposta

8

Non esiste un metodo integrato per questo, tuttavia è possibile recuperare il nome dell'azione corrente con Route::currentRouteAction(). Sfortunatamente questo metodo restituirà un nome di classe completamente con spazio dei nomi. Così si otterrà qualcosa di simile a:

App\Http\Controllers\[email protected] 

è possibile verificare la presenza di questo o usare qualcosa come ends_with in modo da non è necessario specificare il percorso completo:

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

Potrebbero considerare denominando i percorsi con 'as' => 'route.name'. Questo ti permetterebbe di usare: Route::is('route.name')

+0

Grazie per compreso il bit sulla denominazione vostri itinerari. Ho già avuto il mio nome così che mi ha risparmiato un sacco di tempo e fatica. – Styphon

2

So che questo è vecchio, ma per quello che vale.

Laravel ha un paio di built-in helper methods for referring to URLs azione e percorso.


action

Il file percorso sarà simile a questa.

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

La vista lama sarebbe simile a questa

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

route

Se si utilizza named routes.

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

actualy avevo semplificato al seguente codice:

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

Ciò presuppone che percorsi denominati. Quale è una buona idea in primo luogo, perché puoi modificare l'URL di un'azione senza passare attraverso l'intero progetto per modificare i collegamenti a tale azione.

0

Questo è come lo faccio senza alcuna percorsi denominati

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

Questa non è una soluzione perfetta ma funziona per la maggior parte dei casi