Laravel - 如何正确使用高级路由

时间:2014-04-14 01:53:09

标签: php laravel laravel-4

我有一个书目清单,分类和子类别。

每个类别都有很多子类别。每个子类别都属于我的模型中的一个类别。

现在我希望路线像这样:

书籍/ {类别}?

书籍/ {类别?} / {子类别?}

我的路线如下所示:

Route::resource('categories', 'ReligionsController');

Route::resource('category/{category?}', 'ReligionBranchController');

Route::get('category/{category?}/{subcategory?}', function()
{
    return 'Quitter never win';
});

现在的问题是,我的第二条路线完全可以找到,我的ReligionBranchController,但我的最后一条路线(第三条路线)根本没有工作,我收到了这条消息:

 Route pattern "/categories/{category}/{{category}}" cannot reference variable name "category" more than once.

我将如何使用这样的动态路线:

 example.org/category/fear/thriller
 example.org/category/love/drama
 example.org/category/love/science-fiction

希望有人理解我的麻烦。

1 个答案:

答案 0 :(得分:2)

你必须承认Laravel试图以更快的速度解决路线,所以你最通用的路线必须是最后的路线,据说,我建议你改变路线的顺序:

Route::get('category/{category}/{subcategory}', function()
{
    return 'Quitter never win';
});

Route::resource('category/{category?}', 'ReligionBranchController');

Route::resource('categories', 'ReligionsController');

此外,这条路线

Route::get('category/{category?}/{subcategory?}', function() ...

完全相同
Route::get('category/{category?}', function()

如果您的用户只传递一个参数,或者根本没有参数,那么我还建议您将其更改为:

Route::get('category/{category}/{subcategory}', function() ...

这样,如果有人给出类别和子类别,它将输入第一个,如果只是类别或没有类别,则第二个。