【问题标题】:PHP Regex Routing Function match URLSPHP 正则表达式路由函数匹配 URL
【发布时间】:2011-04-21 02:09:34
【问题描述】:

我想编写一个解析 URL 的路由器,例如我给它规则,然后我想有一个基于名称的数组。

======

已编辑:

所以我确实稍微重写了代码 新代码可以在这里找到: http://pastebin.com/Ver601FF

结果可以在这里看到: http://img824.imageshack.us/i/phpprob.png/

我现在没有得到的是我可以根据数组中的正则表达式匹配 url 值的方式,该数组具有第二个路由参数的索引。

=========================编辑停止================== 最后我想要一个数组:

$request['controller']
$request['action']

作为基本的 $request 参数,因为我一直需要它们——因此这必须是我的标准/默认路由。

假设 $pattern[2] 正在发生,当我完成这个可怕的正则表达式时,我想要这样:

$request['controller']
$request['action'] = show
$request['id']
$request['name']

显然,所有内容都必须根据请求的 url 相应地填写...

不知道是不是因为晚了,但我想不通,我必须如何匹配那些东西。

在我检查它是否与路由匹配之后,我是否需要拆分 url?然后使用它们彼此对应的价值观。

另一个我不知道解决方案的问题是这样一个 url,例如

“/信息/显示/一些/其他/东西”

必须给我类似的东西

$request['controller']  = information
$request['action'] = show
$request['params'] = array(some, other, stuff)

感谢任何形式的帮助,并希望有人能帮助我摆脱这个麻烦:(

非常感谢您。

【问题讨论】:

    标签: php regex url routing router


    【解决方案1】:
    $regex  .= "[a-zA-Z]\/";
    

    应该是

    $regex  .= "[a-zA-Z]+\/";
    

    第一个匹配一个字母。第二个匹配一个或多个。

    此外,您的斜线位于错误的位置([]/[]//[]/[])并且您的匹配没有锚定。

    ...
    $regex .= "\/[a-zA-Z]+";
    ...
    $regex .= "\/" . $route;
    ...
    print_r(preg_grep("/^" . $patt . "\z/i", $url));
    ...
    

    【讨论】:

      【解决方案2】:

      我自己找到了我的问题的答案 - 我希望它可以帮助那里的人。但我什至可能会在稍作更新后将其发布到某个地方。

      查看解决方案: http://pastebin.com/FAbhneMZ

      我现在要重写它并从中产生一个适当的类,如果有人认为这个小路由器的逻辑可以改进,请告诉我!

      所有最好的人。

      编辑 更改了链接,因为该版本仍然存在错误并且不好,这是我正在使用的最终解决方案,经过 2 天的测试,我认为它只是按照我需要的方式工作。希望它可以帮助别人!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2011-11-05
        相关资源
        最近更新 更多