我使用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)
答案 0 :(得分:0)
是训练练习,例如要向自己证明你能做到吗?
你可以(不使用正则表达式)将请求uri用/字符拆分,然后按顺序迭代通过数组并使用与ActiveRecord相同的机制(从我记忆中),即
一个优点是您可以使用reflection和dynamic method (ahem functions) calls ...
这样你甚至不需要拥有一个包含所有可能的uris的数据库(除了可能用于白名单),你只需要检查类(通过自动加载或通过使用Java方式的文件系统:一个类=存在一个文件)或方法(通过method_exists)来完成请求。
我使用该技术一次用于基于Flex的客户端的Web服务原型:构建flex客户端的人事先并不知道他需要的表格,而且我不可用(读取“已分配”)为每个客户端创建一个包装器他可能需要调用,所以我最终编写了一些使用oracle元数据来检查模式中是否存在表格,然后在PHP中动态构建一个CRUD(粗略的,我知道)包装的东西:)