Fat Free Framework 路由无法区分参数和 URI

Fat Free Framework routing cannot not differentiate parameters from URI

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

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

路线

GET /@category_slug = CategoryController->CategorySlug
GET /@category_slug/@subcategory_slug = CategoryController->SubcategorySlug
GET /@category_slug/@template_slug = SingleProductController->SinglePageSlug

类别控制器处理它需要处理的与类别和子类别相关的所有内容,但显然不会处理与单个页面相关的任何内容。我的意思是路由不会区分参数和URI,也不会识别它是Subcategory还是Single page。

这是一个示例 URI

example.com/MainCategory/Subcategory
example.com/MainCategory1/Subcategory1
example.com/MainCategory/SinglePage1
example.com/MainCategory/SsinglePage2 

知道如何解决这个问题吗?

提前致谢

框架无法区分这两条路线的原因和人类是一样的。您怎么知道 /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 << 这里我们保留子类别级别

还有一个解决方案,就像您 自己一样,保持模棱两可的 URL 结构并让控制器猜测它是否应该显示子类别或单个页面。

GET /@category_slug/@slug = CategoryController->GuessSubcategoryOrSinglePage

但我不建议这样做,原因如下:

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

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

NB2:不要过分关注制作 "pretty urls",因为大多数最终用户从不关心它们。