Laravel:为类别创建分层路由

时间:2016-11-21 09:39:36

标签: laravel seo categories multi-level

我正在实施类别结构,有些产品会有一个级别,但其他产品可能有两个或更多级别:

/posts/cat2/post-sulg

/posts/cat-1/sub-1/post-slug

/posts/cat-3/sub../../../post-slug

因为我不知道它的深度如何,并且使用类别slug仅适用于seo(我只发现它的slug),创建处理这种结构的路径的最佳方法是什么?

2 个答案:

答案 0 :(得分:6)

您可以通过以下方式解决此问题:

Route::get('posts/{categories}', 'PostController@categories')
    ->where('categories','^[a-zA-Z0-9-_\/]+$');

然后在控制器中

class PostController
{
    public function categories($categories)
    {
        $categories = explode('/', $categories);
        $postSlug = array_pop($categories)

        // here you can manage the categories in $categories array and slug of the post in $postSlug
        (...)
    }

}

答案 1 :(得分:0)

我使用

在PostController.php中做了类似的操作
public function slug($slug) { return $this->show(Post::where('slug', @end(explode('/', $slug)))->firstOrFail()); }

在routes / web.php中

Route::get ('posts/{slug}', 'PostController@slug')->name('post.slug')->where(['slug' => '^(?!((.*/edit$)|(create$))).*\D+.*$']);
Route::resource('posts', 'PostController');

如果您想使用完整的类别列表作为子弹,只需更改子弹功能即可:

public function slug($slug) { return $this->show(Post::where('slug', $slug)->firstOrFail()); }