PHP MVC自定义URI没有指定控制器


PHP MVC Custom URI Without Controller Specified

我正在寻找的是一种实现MVC的方法,而不需要在uri中指定的控制器。我发现的问题是,我可以拥有一个简单的url(如example.com/blue-widget)的唯一方法是,如果我首先查询数据库以确定产品表是否具有指定的"blue-widget"的自定义uri,如果它返回一行,那么我可以路由到产品控制器。这种方法的问题是,我必须查询每个表,然后检查是否返回了任何行,以确定要路由到哪个控制器。这感觉太过分了。特别是当我需要更多的控制器时。

我希望保留典型MVC应用程序的传统功能,以便路由是控制器/动作/参数。我只是想添加这个特性,以便路由部分可以根据自定义uri确定使用哪个控制器,而最好不需要查询数据库,但如果这是唯一的选择,我将不得不接受这一点,并可能将其最小化为确定在哪个表中找到它的单个查询。

简而言之,传统上对我来说,访问blue-widget的产品页面,我需要至少有一个这样的url:

example.com/product/blue-widget

我要找的是这样一个url:

example.com/blue-widget

,但有某种逻辑来确定uri蓝色小部件是一个产品,或一个页面,或一个类别等,而不需要创建任何类型的映射每个可能的自定义uri

这是一个自定义的MVC实现,不基于任何特定的框架

在我看来有两个主要的选项:

  • 配置你的路由器,默认匹配经典的/:controller/:action/:id结构,如果没有找到匹配,则默认为/:id模式,:controller:action段默认值

  • 让你的路由器主要使用APCu缓存,其中每个:id都有与之相关的控制器和操作名称的匹配条目。如果缓存查找失败,则返回标准模式匹配作为备份

也许这篇文章也有用:https://stackoverflow.com/a/19309893/727208