2013-05-30 11 views
6

私はLaravel 4のチュートリアルをいくつか試しています。なぜそれが間違っているのか分かりません。オプションのパラメータを使用したクロージャの引数がありません

私がしようとしていることは、URLを見て、それに基づいて論理的に動作するルートを作成することです。ここに私の現在のコードは次のとおりです。URLがhttp://localhost/booksある場合

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

ので、ページには、「ブックインデックス」を返す必要がありますURLがhttp://localhost/books/mysteryと表示されている場合、ページには「ミステリーカテゴリの書籍」が返されます。

しかし、「{closure}()の引数が1つもありません」というエラーが表示されています。私はLaravelのドキュメントを参照したこともあり、パラメータはまったく同じように形式化されています。どんな助けもありがとう。

答えて

9

ジャンルがオプションである場合は、デフォルト値を定義する必要があります。

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

このような迅速な返信をありがとう。魅力のように動作します。 – Triccum

+1

ルートに 'defaults'を指定することもできます。' Route :: get( 'books/{genre?}'、function($ genre){return $ genre;}) mystery '); ' –

+0

genreがnullの場合、genreは最後の関数に" Scifi "値を持ちます。あなたは "本の索引"が決して現れないことを理解できます –

1

ジャンルはオプションで、あなたは$genreにデフォルト値を定義する必要があります。​​あなたのコードの "ブックインデックス"と一致するようにします。

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


return "Books in the {$genre} category"; 
}); 
関連する問題