关于子类路由的思考

时间:2011-07-12 20:25:03

标签: php model-view-controller url routing

我正在构建一个基本的路由系统,以便摆脱index.php?page_id = 2的东西,并使用格式良好的URL,如: 新闻/区域/体育/棒球/初中联赛/ 2010 例如,它会带我参加2010年青少年联赛的棒球新闻

基本结构是这样的:有一个路由器评估url并访问适当的控制器并使用一些(可选)参数调用方法。然后控制器调用适当的模型类并将其绑定到视图,然后输出。

按照前面的例子,我想访问: 新闻/区域/体育/棒球/初中联赛/ 2010 我想称之为BaseballController :: view(junior-league,2010)方法。

我希望将方法保持模块化,因此无需定义(站点)特定路由。我只想在我的URL中有一个模式,这样我就可以使用正确的参数调用正确控制器的方法。

如何格式化我的网址并指定一些评估规则,以便获得此行为? (这可能吗?)

我想到的解决方案:

  • 示例网址:news / regional / sports / baseball / view / junior-league / 2010
    1. 在斜杠上爆炸(产生数组)
    2. 使用方法数组[1]
    3. 查找数组[0]控制器
    4. 如果该方法存在,则使用参数
    5. 调用它
    6. 如果没有,请查找带有数组[2]方法
    7. 的数组[1]控制器

    8. 优点是这种方法非常模块化。唯一的问题是,访问页面的时间会变长,具体取决于子类别的数量(或者这是否可忽略?)。也许这个过程可以通过存储站点地图加快(但这就是我不想要的)
  • 格式化这样的网址:[控制器路径] / [控制器] / [操作] - [参数1] - [参数2] 示例:使用此算法的news / regional / sports / baseball / view-junior_league-2010
    1. 剥离“ - ”(生成数组)[news / regional / sports / baseball / view,junior_league,2010]
    2. 拿第一个elem并在斜线上爆炸[[新闻,地区,体育,棒球,观点],junior_league,2010]
    3. 在目录controllers / news / regional / sports中的控制器数组[0] [last-1](棒球)中搜索名为array [0] [last](view)的方法。使用数组的其余部分作为参数 缺点是你也使用下划线,网址不再很好了。也许这很费时间?

如果您已经阅读了所有这些内容,谢谢!也许你可以分享你的想法? Gr Bastiaan

1 个答案:

答案 0 :(得分:1)

我最近一直在使用ToroPHP,它使用PHP数组来定义要匹配的正则表达式模式,以及在匹配时调用的处理程序。

请查看ToroPHP,并根据您的需求推断部分解决方案。