Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel:为类别创建分层路由_Laravel_Seo_Categories_Multi Level - Fatal编程技术网

Laravel:为类别创建分层路由

Laravel:为类别创建分层路由,laravel,seo,categories,multi-level,Laravel,Seo,Categories,Multi Level,我正在实施类别结构,一些产品将有一个级别类别,但其他产品可能有两个或更多级别: /posts/cat2/post-sulg /posts/cat-1/sub-1/post-slug /posts/cat-3/sub../../../post-slug 因为我不知道它会有多深,使用分类slug只是为了搜索引擎优化(我只通过slug找到帖子),创建一条处理这种结构的路线的最佳方法是什么 您可以通过以下方法解决此问题: Route::get('posts/{categories}', 'Post

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

/posts/cat2/post-sulg

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

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

因为我不知道它会有多深,使用分类slug只是为了搜索引擎优化(我只通过slug找到帖子),创建一条处理这种结构的路线的最佳方法是什么

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

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
        (...)
    }

}

我在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');
如果要使用完整类别列表作为slug,只需更改slug函数:

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

谢谢,但您应该添加
->其中('categories','^[a-zA-Z0-9-\/]+$)^[a-zA-Z0-9-\u\/]+$
--\u\/-\ u\/
进行布线以使其工作,这是一条有效的布线()。