2013-05-30 2 views
6

Je suis en train de travailler sur quelques tutoriels pour Laravel 4 et j'ai rencontré un problème que je n'arrive pas à comprendre ni à comprendre pour expliquer pourquoi il fonctionne incorrectement. Ce que j'essaie de faire compose un itinéraire qui regarde l'URL, puis fonctionne logiquement sur cette base. Voici mon code actuel:Argument manquant pour la fermeture avec paramètre optionnel

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

Donc, si l'URL est http://localhost/books, la page doit retourner "index Livres." Si l'URL indique http://localhost/books/mystery, la page doit renvoyer "Livres dans la catégorie mystère".

Cependant, j'obtiens une erreur 'Argument manquant 1 pour {fermeture}()'. J'ai même fait référence à la documentation de Laravel et ils ont leurs paramètres formulés exactement de la même manière. Toute aide serait appréciée.

Répondre

9

Si le genre est en option, vous devez définir une valeur par défaut:

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

Merci pour une réponse rapide. Fonctionne comme un charme. – Triccum

+1

Vous pouvez également ajouter 'defaults' à la route, donc' Route :: get ('livres/{genre?}', Function ($ genre) {return $ genre;}) -> par défaut ('genre', ' mystery '); ' –

+0

cause incorrecte si le genre est nul, le genre aura la valeur" Scifi "dans la dernière fonction. vous pouvez réaliser que "l'index des livres" ne sera jamais montré –

1

Genre est facultative, vous devez définir une valeur par défaut à $genre. $genre=null pour que cela corresponde à "Indice du livre" de votre code.

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


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