缺少闭包的可选参数。

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,页面应返回“神秘类别的图书”。
然而,我遇到了“{closure}()缺少参数1”的错误。我甚至参考了Laravel文档,它们的参数格式完全相同。任何帮助将不胜感激。
2个回答

9
如果类型是可选的,您必须定义一个默认值:
Route::get('/books/{genre?}', function($genre = "Scifi")  
{  
    if ($genre == null) return 'Books index.';  
    return "Books in the {$genre} category.";  
});

谢谢您的快速回复。运行得非常好。 - Triccum
1
你也可以为路由提供一个 defaults,因此 Route::get('books/{genre?}', function($genre) { return $genre; })->defaults('genre', 'mystery'); - Jason Lewis
如果类型为空,则会导致错误,因为在最后一个函数中,类型将具有“科幻”值。你可以意识到“书籍索引”永远不会显示。 - Xavier Ojeda Aguilar

1
类型是可选的,您必须定义一个默认值为 $genre。使用 $genre=null 来匹配您代码中的“书目录”
Route::get('books/{genre?}', function($genre=null)
{
    if (is_null($genre)) 
        return "Books index";


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接