2015-06-02 15 views
5

Dopo ore di ricerca, non riuscivo ancora a trovare la risposta per L5.Laravel 5 - metodo link_to_route() che consente di modificare i parametri del percorso in stringa di query aggiungendo "?" alla fine

Quello che il mio problema è:

Voglio fare un collegamento simile a questa:

localhost:800/songs/you-drive-me-crazy 

Ma ciò che è ottenere è:

localhost:800/songs?you-drive-me-crazy 

mio parametro percorso sta cambiando in interrogazione stringa.

//routes.php

$router->bind('songs', function($slug) 
{ 
return App\Song::where('slug', $slug)->first(); 
}); 


$router->get('songs', ['as' => 'songs.index', 'uses' => '[email protected]']); 

$router->get('songs/{songs}', ['as' => 'songs.show', 'uses' => '[email protected]']); 

sto usando:

{!! link_to_route('songs.index', $song->title, [$song->slug]) !!} 

Ho provato di tutto, ma non è ancora riuscito, il suo suggerimento può essere utile.

Grazie.

+0

L5 == Laravel 5? –

+0

sì, L5 == Laravel 5 – Saj

+0

prova questo {!! link_to_route ('songs.index', $ song-> title, ['songs' => $ song-> slug]) !!} –

risposta

10

L'utilizzo di link_to_route è corretto:

{!! link_to_route('songs.index', [$song->title, $song->slug]) !!} 

Il primo parametro è il nome del percorso, il secondo parametro è un array di parametri di percorso, preferibilmente utilizzando il valore chiave. Poiché non è fatto vedere il percorso definito, è difficile immaginare che cosa questo array associativo dovrebbe essere simile:

{!! link_to_route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!} 

Inoltre vi consiglio di utilizzare le funzioni documentate: route(), vedi: http://laravel.com/docs/5.0/helpers#urls

Un correttamente richiesto rotta utilizzando route():

{!! route('songs.index', ['title'=>$song->title, 'slug'=>$song->slug]) !!} 

Un percorso correttamente formattato sarebbe allora:

Route::get('songs/{title}/{slug}', ['as' => 'songs.index', 'uses' => '[email protected]']); 

Questo si tradurrà in un URL del tipo: http://localhost:800/songs/you-drive-me-crazy/slug

Se si desidera solo aggiungere il titolo all'URL, ma non la lumaca, utilizzare un percorso come questo:

Route::get('songs/{title}', ['as' => 'songs.index', 'uses' => '[email protected]']); 

Questo si tradurrà in un URL del tipo: http://localhost:800/songs/you-drive-me-crazy/?slug=slug

Utilizzando

Route::get('songs/{slug}', ['as' => 'songs.index', 'uses' => '[email protected]']); 

Il URL sarà come: http://localhost:800/songs/you-drive-me-crazy/?title=title assumendo la lumaca ora è you-drive-me-crazy

Qualsiasi parametro aggiunto in una chiamata route() sarà aggiunto come parametro GET se non è esistente nella definizione della rotta.

+0

non funziona. – Saj

+0

secondo parametro è il testo che viene visualizzato come collegamento. non può essere un array – Saj

+0

qual è la tua definizione route.php – Luceos

1

risolto, grazie per le vostre grandi preoccupazioni e suggerimenti.

ero il collegamento al percorso sbagliato qui:

`{!! link_to_route('songs.index', $song->title, [$song->slug]) !!}` 

ora, ho cambiato come:

`{!! link_to_route('songs.show', $song->title, [$song->slug]) !!}` 

e lo ha fatto il trucco.

Problemi correlati