2016-06-19 61 views
5

Come ottenere l'ultima parte dell'URL corrente senza '/' in modo dinamico?Ottieni l'ultima parte dell'URL corrente in Laravel 5 utilizzando Blade

esempio:

www.news.com/foo/bar
get -> bar

www.news.com/foo/bar/fun
get -> divertimento

Dove mettere la funzione o come implementarla nella vista corrente?

+0

https://laravel.com/api/5.2/Illuminate/Contracts/Routing/UrlGenerator.html#method_current e fare una regex per ottenere la parte –

+0

Grazie, potresti darmi un esempio? –

+0

se pubblichi un codice di esame con quello che ti è venuto in mente ti aiuterò. –

risposta

4

Route object è la fonte delle informazioni desiderate. Ci sono alcuni modi in cui puoi ottenere le informazioni e la maggior parte di esse implica il passaggio di qualcosa alla tua vista. Suggerisco caldamente di non eseguire il lavoro all'interno della lama poiché questo è il motivo per cui le azioni del controller sono.

passando un valore per la lama

Il modo più semplice è quello di rendere l'ultima parte del percorso un parametro e passare tale valore alla vista.

// app/Http/routes.php 
Route::get('/test/{uri_tail}', function ($uri_tail) { 
    return view('example')->with('uri_tail', $uri_tail); 
}); 

// resources/views/example.blade.php 
The last part of the route URI is <b>{{ $uri_tail }}</b>. 

Per evitare i parametri del percorso è necessario un po 'più di lavoro.

// app/Http/routes.php 
Route::get('/test/uri-tail', function (Illuminate\Http\Request $request) { 
    $route = $request->route(); 
    $uri_path = $route->getPath(); 
    $uri_parts = explode('/', $uri_path); 
    $uri_tail = end($uri_parts); 

    return view('example2')->with('uri_tail', $uri_tail); 
}); 

// resources/views/example2.blade.php 
The last part of the route URI is <b>{{ $uri_tail }}</b>. 

fare tutto nella lama utilizzando il request helper.

// app/Http/routes.php 
Route::get('/test/uri-tail', function() { 
    return view('example3'); 
}); 

// resources/views/example3.blade.php 
The last part of the route URI is <b>{{ array_slice(explode('/', request()->route()->getPath()), -1, 1) }}</b>. 
3

Prova request()->segment($number) dovrebbe darti un segmento dell'URL.

Nel tuo esempio, dovrebbe essere probabilmente request()->segment(2) o request()->segment(3) in base al numero di segmenti presenti nell'URL.

-1

Prova con:

{{ array_pop(explode('/',$_SERVER['REQUEST_URI'])) }} 

Dovrebbe funzionare bene.

+1

Aggiungere anche un rtrim per rimuovere l'ultima barra se necessario. –

11

Naturalmente c'è sempre il modo laravel:

request()->segment(count(request()->segments())) 
+0

Il mio primo pensiero esattamente, una riga di codice ;-) semplice da capire –

0

E 'stato utile per me:

request()->path() 

da www.test.site/news

get - > news

+0

la soluzione più semplice finora – Farveaz

+1

Questo a volte restituisce una parte extra del link: esempio/blabla invece di blabla –

5

Ecco come l'ho fatto:

{{ collect(request()->segments())->last() }} 
7

Usa basename() con Request::path().

basename(request()->path()) 

Si dovrebbe essere in grado di chiamare che da qualsiasi punto nel codice dal request() è una funzione di supporto globale nel laravel e basename() è una funzione standard di PHP, che è anche disponibile a livello globale.

0

usando funzione di supporto del laravel 'ultima'

last(request()->segments())