像Slim Framework一样的路由类

时间:2014-01-29 13:22:25

标签: php regex frameworks router slim

我使用Slim Framework for Routing编写了一个小CMS。 现在,我想把我的路线中的所有代码放在课堂上并自己联合网址(没有Slim)

我有一个包含以下路由的数据库表:

url: /app/user/list
URI: index.php?com=user&fnc=list

但我也希望我有这样的路线来动态管理路线:

url: /app/user/:id/profile
URI: index.php?com=user&func=profile&uid={id}

Slim框架使用正则表达式处理这些路由。这也是我想要处理它的方式。但我对正则表达式不太满意。

我的想法是我构建一个小的Router类来连接当前的url并在数据库表中搜索以获取uri,以便我可以使用其函数(fnc)调用类(com)。例如profile函数获取uid。

遗憾的是,我无法排除slim框架中使用的功能。我甚至不想使用其他框架。

所以我的问题:有没有人建立我解释过的课程或者有没有开始扩展的课程? 有些代码也不错:D

(我使用Smarty模板引擎渲染特定的tpl)

1 个答案:

答案 0 :(得分:0)

是训练练习,例如要向自己证明你能做到吗?

你可以(不使用正则表达式)将请求uri用/字符拆分,然后按顺序迭代通过数组并使用与ActiveRecord相同的机制(从我记忆中),即

  1. 读取拆分函数返回的数组项
  2. 如果参数与预定义的控制器匹配(在您的案例类中),则使用该类,如果不返回错误或回退到默认控制器
  3. 如果参数与2中选择的控制器的方法匹配,则使用该方法,如果不返回错误或回退到默认行为
  4. 如果数组的其余部分不为空,则使用其余项作为3
  5. 中所选方法的参数
  6. 使用参数调用方法并将结果返回给用户。
  7. 一个优点是您可以使用reflectiondynamic method (ahem functions) calls ...

    这样你甚至不需要拥有一个包含所有可能的uris的数据库(除了可能用于白名单),你只需要检查类(通过自动加载或通过使用Java方式的文件系统:一个类=存在一个文件)或方法(通过method_exists)来完成请求。

    我使用该技术一次用于基于Flex的客户端的Web服务原型:构建flex客户端的人事先并不知道他需要的表格,而且我不可用(读取“已分配”)为每个客户端创建一个包装器他可能需要调用,所以我最终编写了一些使用oracle元数据来检查模式中是否存在表格,然后在PHP中动态构建一个CRUD(粗略的,我知道)包装的东西:)