我正在寻找的是一种实现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