使用Laravel的路由类别、子类别和文章

使用Laravel的路由类别、子类别和文章,laravel,routing,laravel-5.1,laravel-routing,Laravel,Routing,Laravel 5.1,Laravel Routing,我经常看到网站上的分类、子分类和文章都有漂亮的URL。如何使用Laravel复制此功能 我需要让以下路线正常工作: /kb/{id (numeric)} /kb/{category} /kb/{category}/{article} (redirects to the route immediately below, adding the id) /kb/{category}/{article}/{id (numeric)} /kb/{category}/{subcategory} /kb/{c

我经常看到网站上的分类、子分类和文章都有漂亮的URL。如何使用Laravel复制此功能

我需要让以下路线正常工作:

/kb/{id (numeric)}
/kb/{category}
/kb/{category}/{article} (redirects to the route immediately below, adding the id)
/kb/{category}/{article}/{id (numeric)}
/kb/{category}/{subcategory}
/kb/{category}/{subcategory}/{article} (redirects to the route immediately below, adding the id)
/kb/{category}/{subcategory}/{article}/{id (numeric)}
/kb/download/{id (numeric)}
我还打算尝试将漂亮的URL包含在分页中,但我意识到,如果在类别和子类别后面有一个
/page/1
部分,可能会使它更加复杂-但是,如果你知道如何实现这一点,请告诉我

目前,我的代码如下:

Route::group(['prefix' => '/kb', 'as' => 'kb::'], function () {

    Route::get('/', function() {
        echo "<h1>Index</h1>";        
    });

    Route::get('{id}', function($id = null) {
        echo "<h1>ID: $id</h1>";
    })->where('id', '0-9+');

    Route::get('download/{id}', function($id = null) {
        echo "<h1>Download ID: $id</h1>";
    })->where('id', '0-9+');

    Route::get('{category}', function($category = null) {
        echo "<h1>Category: $category</h1>";
    });
    Route::get('{category}/{article}', function($category = null, $article = null) {
        echo "<h1>Category: $category</h1>";
        echo "<h1>Article: $article</h1>";
    });
    Route::get('{category}/{article}/{id}', function($category = null, $article = null, $id = null) {
        echo "<h1>Category: $category</h1>";
        echo "<h1>Article: $article</h1>";
        echo "<h1>ID: $id</h1>";
    })->where('id', '0-9+');

    Route::get('{category}/{subcategory}', function($category = null, $subcategory = null) {
        echo "<h1>Category: $category</h1>";
        echo "<h1>SubCategory: $subcategory</h1>";
    });
    Route::get('{category}/{subcategory}/{article}', function($category = null, $subcategory = null, $article = null) {
        echo "<h1>Category: $category</h1>";
        echo "<h1>SubCategory: $subcategory</h1>";
        echo "<h1>Article: $article</h1>";
    });
    Route::get('{category}/{subcategory}/{article}/{id}', function($category = null, $subcategory = null, $article = null, $id = null) {
        echo "<h1>Category: $category</h1>";
        echo "<h1>SubCategory: $subcategory</h1>";
        echo "<h1>Article: $article</h1>";
        echo "<h1>ID: $id</h1>";
    })->where('id', '0-9+');

});
Route::group(['prefix'=>'/kb','as'=>'kb::'],函数(){
路由::获取('/',函数(){
回声“指数”;
});
路由::get({id}),函数($id=null){
回显“ID:$ID”;
})->其中('id','0-9+');
路由::get('download/{id}',函数($id=null){
echo“下载ID:$ID”;
})->其中('id','0-9+');
路由::get({category}),函数($category=null){
echo“类别:$Category”;
});
路由::get({category}/{article}),函数($category=null,$article=null){
echo“类别:$Category”;
echo“文章:$Article”;
});
路由::get({category}/{article}/{id}),函数($category=null,$article=null,$id=null){
echo“类别:$Category”;
echo“文章:$Article”;
回显“ID:$ID”;
})->其中('id','0-9+');
路由::get({category}/{subcategory}),函数($category=null,$subcategory=null){
echo“类别:$Category”;
回显“子类别:$SubCategory”;
});
路由::get({category}/{subcategory}/{article}),函数($category=null,$subcategory=null,$article=null){
echo“类别:$Category”;
回显“子类别:$SubCategory”;
echo“文章:$Article”;
});
路由::get({category}/{subcategory}/{article}/{id}),函数($category=null,$subcategory=null,$article=null,$id=null){
echo“类别:$Category”;
回显“子类别:$SubCategory”;
echo“文章:$Article”;
回显“ID:$ID”;
})->其中('id','0-9+');
});
不幸的是,这有一个混淆文章和子类别的习惯,这是一个完全混乱的局面。但我看到的网站都是这种结构,甚至更复杂的结构,它们都能工作——秘密是什么

同样重要的是要记住,两个类别可能有同名的子类别,而不是相同的子类别,这会使事情更加复杂


编辑:我刚刚还考虑了可能在每篇文章前面加上
article
,比如
/kb/cat/article/evil/666
。尽管如此,令人恼火的是,这似乎仍然不起作用。

你们知道,最后一级分类足以定义父树。我认为,即使从seo的角度来看,使用这样的方法也是不好的。但是如果你想要它,我认为如果你有混合长度的列表,你需要解析你自己的。@skad0如果这对搜索引擎优化不理想,你会有什么建议?我愿意接受任何建议,这只是原型阶段。这真的取决于项目。但我经常在自己的项目中定义根类别,其他的则定义为过滤器。你们知道,最后一级类别足以定义父树。我认为,即使从seo的角度来看,使用这样的方法也是不好的。但是如果你想要它,我认为如果你有混合长度的列表,你需要解析你自己的。@skad0如果这对搜索引擎优化不理想,你会有什么建议?我愿意接受任何建议,这只是原型阶段。这真的取决于项目。但我经常在自己的项目中定义根类别,而不是过滤器。