【问题标题】:Routing Class like Slim Framework类似 Slim 框架的路由类
【发布时间】:2014-01-29 13:22:25
【问题描述】:

我用 Slim 路由框架编写了一个小 CMS。 现在,我想将我的路线中的所有代码放在类中并自己连接 url(没有 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 框架使用正则表达式处理这些路由。这也是我想处理的方式。但我对正则表达式不太满意。

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

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

所以我的问题是:有没有人建立过我解释过的课程,或者是否有任何开始可以扩展? 一些代码也会很好:D

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

【问题讨论】:

  • /app/user/:name/:id/:whatever/profile.html/app/user/:name/:id/:whatever/:id2.html 之类的网址也应该是可能的。就像 Slim...

标签: php regex frameworks router slim


【解决方案1】:

这是一个训练练习吗?向自己证明你能做到?

您可以(不使用正则表达式)通过 / 字符拆分请求 uri,然后按顺序遍历数组并使用与 ActiveRecord 相同的机制(据我所知),即

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

一个优点是您可以使用reflectiondynamic method (ahem functions) calls...

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

我曾经将该技术用于基于 Flex 的客户端的 Web 服务原型:构建 flex 客户端的人事先不知道他需要的表,并且我无法(阅读“已分配”)为每个表制作包装器打电话给他可能需要,所以我最终编写了一些代码,使用 oracle 元数据来检查架构中是否存在表,然后在 PHP 中动态构建一个 CRUD(我知道是粗略的)包装器 :)

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2018-03-08
    • 2016-06-28
    • 2014-08-27
    • 2013-01-09
    相关资源
    最近更新 更多