【问题标题】:Quickly Routing a url into a function call to match api rules快速将 url 路由到函数调用中以匹配 api 规则
【发布时间】:2011-08-15 22:31:02
【问题描述】:

我需要一种使用配置语法快速将 url 路由到 Class->Method() 调用的方法,而不是对每种情况都进行编程。

我有一个网络工具,它接受一个 url 并使用它来确定 url 所指的对象的类、要使用的类方法以及该方法的参数。我正在使用 .htaccess 将所有请求引导到 index.php,因此我从 $_SERVER['PATH_INFO'] 读取路径并从那里过滤并分解它以获取各个组件。

因此 www.example.com/user/view/12345 将创建一个用户控制器并调用将显示用户配置文件的视图函数。实际上,它将执行以下操作:

$url = explode("/",trim($_SERVER['PATH_INFO'],"/");
$class = $url[0] . "_Controller";
$page = new $class;
echo call_user_func_array(array($page, $url[1]), $url);

现在这当然是过于简单化了,还有很多其他的活动部分没有在这里显示,__autoload()、页面模板系统等,但你明白了。 url 是 domain_name/class/function/[arg1]/[arg2]/[arg3]/... 并且代码可以快速确定渲染页面所需的内容。

不幸的是,网站需要匹配政策规定的 api 规则。根据政策,网址应该是:

domain_name/class/entityid/function_alias/[arg1]/[arg2]/[arg3]/... 对于影响特定实体的工具

domain_name/class/function_alias/[arg1]/[arg2]/[arg3]/... 用于不绑定到单个实体的工具

我已经解决了这个问题,但它很乱。我没有为 $url[0] 中的类调用 $url[1] 中的函数并将剩余的参数传递给它,而是从 $url[0] 确定对象类,实例化它,然后将 url 传递给对象的route($url) 方法。从那里我得到了 switch 和 if 语句的混乱组合,将 url 转换为正确的类方法。

我需要的是某种配置文件或路由表,我可以在其中定义 url 的样子。我知道有 CMS 会做这种事情。

"user/$1"           => user/view/$1
"user/add"          => user/add
"user/$1/edit"      => user/edit/$1
"user/$1/key/$2"    => user/edit_key/$1/$2

我需要的是一种语法和算法,可以快速确定 url 的实际目标类和方法是什么,对其进行实例化,并将必要的 url 值传递给它。

【问题讨论】:

  • entityid总是一个整数吗?

标签: php api url


【解决方案1】:

可能确实存在会读取某种配置文件的路由类,但我无法轻易找到。

这里有几个例子,或者人们在纯 PHP 中创建相对优雅的解决方案:
PHP Application URL Routing
http://blog.sosedoff.com/2009/07/04/simpe-php-url-routing-controller/

其中任何一个都适合您的需要吗?

当然,您也可以纯粹使用 apache 重写来完成这些重定向。

【讨论】:

  • 非常好,我正在做的事情有点复杂,但绝对让我朝着正确的方向前进。
猜你喜欢
  • 2021-01-21
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多