2013-05-30 5 views
6

Я работаю над несколькими учебниками для Laravel 4, и я столкнулся с проблемой, которую я не могу понять или понять, почему он работает неправильно.Отсутствует аргумент для замыкания с необязательным параметром

Что я пытаюсь сделать, составление маршрута, который смотрит на URL-адрес, а затем работает на нем логически. Вот мой текущий код:

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

Таким образом, если URL является http://localhost/books, страница должна возвращать «индекс книги.» Если URL-адрес читается http://localhost/books/mystery, страница должна вернуть «Книги в категории тайн».

Однако я получаю «Отсутствующий аргумент 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

Вы также можете указать «по умолчанию» на маршрут, поэтому «Route :: get (« books/{genre?} », Function ($ genre) {return $ genre;}) -> defaults ('genre', ' mystery '); ' –

+0

неправильная причина, если жанр равен нулю, жанр будет иметь значение« Scifi »в последней функции. вы можете понять, что «индекс книг» никогда не будет показан –

1

Жанр не является обязательным, необходимо определить значение по умолчанию для $genre. $genre=null, так что он соответствует «Книжный индекс» вашего кода.

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


return "Books in the {$genre} category"; 
}); 
Смежные вопросы