2013-05-30 14 views
6

Sono in procinto di lavorare su un paio di tutorial per Laravel 4 e sono incappato in un intoppo che non riesco a capire o capire perché è in esecuzione in modo errato.Argomento mancante per la chiusura con parametro opzionale

Quello che sto cercando di comporre un percorso che guarda l'URL, e quindi funziona logicamente in base a quello. Qui è il mio codice corrente:

Route::get('/books/{genre?}', function($genre) 
{ 
    if ($genre == null) return 'Books index.'; 
    return "Books in the {$genre} category."; 
}); 

Quindi, se l'URL è http://localhost/books, la pagina dovrebbe restituirla "indice di libri." Se l'URL legge http://localhost/books/mystery, la pagina deve restituire "Libri nella categoria mistero".

Tuttavia, viene visualizzato un errore "Mancante argomento 1 per {closure}()". Ho persino fatto riferimento alla documentazione di Laravel e hanno i loro parametri formulati esattamente allo stesso modo. Qualsiasi aiuto sarebbe apprezzato.

risposta

9

Se il genere è opzionale, è necessario definire un valore di default:

Route::get('/books/{genre?}', function($genre = "Scifi") 
{ 
    if ($genre == null) return 'Books index.'; 
    return "Books in the {$genre} category."; 
}); 
+0

Grazie per una risposta così rapida. Funziona come un fascino. – Triccum

+1

Puoi anche fornire un 'default 'al percorso, quindi' Route :: get (' libri/{genere?} ', Funzione ($ genere) {ritorno $ genere;}) -> valori predefiniti (' genere ',' mystery '); ' –

+0

causa errata se il genere è nullo, il genere avrà il valore" Scifi "nell'ultima funzione. puoi capire che "Indice dei libri" non verrà mai mostrato –

1

genere è opzionale, è necessario definire un valore predefinito per $genre. $genre=null in modo che corrisponda a "Indice libro" del codice.

Route::get('books/{genre?}', function($genre=null) 
{ 
    if (is_null($genre)) 
     return "Books index"; 


return "Books in the {$genre} category"; 
});