2013-05-30 23 views
6

Jestem w trakcie pracy nad parą samouczków dla Laravel 4 i wpadłem w pułapkę, której nie mogę zrozumieć lub zrozumieć, dlaczego jest ona uruchomiona niepoprawnie.Brakujący argument na zamknięcie z opcjonalnym parametrem

Co próbuję zrobić, aby utworzyć trasę, która patrzy na adres URL, a następnie działa logicznie w oparciu o to. Tu jest mój bieżący kod:

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

Więc jeśli adres URL jest http://localhost/books, strona powinna powrócić „indeks książek.” Jeśli adres URL brzmi: http://localhost/books/mystery, strona powinna zwrócić "Książki w kategorii tajemnicy".

Jednak otrzymuję komunikat "Brak argumentu 1 dla {zamknięcia}()". Odniosłem się nawet do dokumentacji Laravel i mają swoje parametry sformułowane dokładnie w ten sam sposób. Każda pomoc będzie doceniona.

Odpowiedz

9

Jeśli gatunek jest opcjonalne, trzeba określić wartość domyślną:

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

Dzięki za szybką odpowiedź. Działa jak marzenie. – Triccum

+1

Możesz również podać 'defaults' dla trasy, więc' Route :: get ('books/{genre?}', Function ($ genre) {return $ genre;}) -> defaults ('genre', ' mystery '); ' –

+0

niewłaściwa przyczyna, jeśli gatunek ma wartość null, gatunek będzie miał wartość" Scifi "w ostatniej funkcji. możesz zrozumieć, że "Indeks książek" nigdy nie zostanie pokazany –

1

Gatunek jest opcjonalne, należy określić wartość domyślną $genre. $genre=null, dzięki czemu pasuje do "Indeks książki" Twojego kodu.

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


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