我正在尝试为所有类别,子类别和单页创建正确的路由。
我的问题是我的子目录路线和我的单页路线非常相同:
GET /@category_slug = CategoryController->CategorySlug
GET /@category_slug/@subcategory_slug = CategoryController->SubcategorySlug
GET /@category_slug/@template_slug = SingleProductController->SinglePageSlug
类别控制器处理它需要处理的与类别和子类别相关的所有内容,但显然不会处理与单个页面相关的任何内容。我的意思是路由不会将参数与URI区分开来,也不会识别它是Subcategory还是单页。
这是一个示例URI
example.com/MainCategory/Subcategory
example.com/MainCategory1/Subcategory1
example.com/MainCategory/SinglePage1
example.com/MainCategory/SsinglePage2
任何想法如何解决这个问题?
提前致谢
答案 0 :(得分:2)
框架无法区分两条路线的原因与人类相同。您如何知道/foo/bar
是子类别还是子页面?
因此,您必须在URL结构中明确区分。这取决于你的想象力。以下是一些例子:
EX1:
/foo
/foo/bar
/foo/bar/page/baz
EX2:
/cat/foo
/cat/foo/bar
/page/baz
EX3:
/foo
/foo/c/bar
/foo/p/baz
EX4:
/foo
/foo/bar
/foo/baz.html
<<这里的后缀有助于区分子类别和文章EX5:
/foo
/foo/bar
/foo/bar/baz
<<这里我们保持子类别级别还有一个解决方案,就像你自己found out一样,保持一个模糊的URL结构并让控制器猜测它是应该显示子类别还是单个页面。
GET /@category_slug/@slug = CategoryController->GuessSubcategoryOrSinglePage
但我不建议,原因如下:
NB1:我的个人偏好转到示例#2,因为为每个页面提供自己的URL可以使页面属于多个类别,而不必处理duplicate content个问题。此外,当您必须构建页面URL时,它会让您的生活更轻松(无论您在代码中的哪个位置,都无需构建类别层次结构。)
NB2:不要过于关注制作“漂亮的网址”,因为大多数终端用户都不关心它们。