Fat Free Framework路由不能区分URI中的参数

时间:2017-07-19 17:56:14

标签: php routing fat-free-framework

我正在尝试为所有类别,子类别和单页创建正确的路由。

我的问题是我的子目录路线和我的单页路线非常相同:

路线

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 

任何想法如何解决这个问题?

提前致谢

1 个答案:

答案 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

但我不建议,原因如下:

  • 维护:代码可读性差
  • 性能:每个页面显示一个额外的无用SQL调用
  • 搜索引擎优化:搜索引擎尝试从目录结构中猜测很多东西。在这里,他们会失败,正如框架或人类所做的那样。

NB1:我的个人偏好转到示例#2,因为为每个页面提供自己的URL可以使页面属于多个类别,而不必处理duplicate content个问题。此外,当您必须构建页面URL时,它会让您的生活更轻松(无论您在代码中的哪个位置,都无需构建类别层次结构。)

NB2:不要过于关注制作“漂亮的网址”,因为大多数终端用户都不关心它们。