typecho的路由规则是啥?

lworld0x00
  • 7

Typecho/Router/Parser.php中的parse方法里面的正则表达式是啥意思?

附代码:

public function parse()
    {
        $result = array();

        foreach ($this->_routingTable as $key => $route) {
            $this->_params = array();
//在_routingTables,[regx] => |^/attachment/([0-9]+)[/]?$|
            $route['regx'] = preg_replace_callback("/%([^%]+)%/", array($this, '_match'),
// [url] => /attachment/[cid:digital]/
            preg_quote(str_replace(array('[', ']', ':'), array('%', '%', ' '), $route['url'])));

            /** 处理斜线 */
            $route['regx'] = rtrim($route['regx'], '/');
            $route['regx'] = '|^' . $route['regx'] . '[/]?$|';

            $route['format'] = preg_replace("/\[([^\]]+)\]/", "%s", $route['url']);
            $route['params'] = $this->_params;

            $result[$key] = $route;
        }

        return $result;
}
回复
阅读 5.3k
4 个回答
ShingChi
  • 810

Typecho的路由实现是保存在数据库中的路由表,使用正则匹配路径,这一点和Django框架有点像。Typecho的路由表如下数组组成,路由器类会使用子数组中的regx正则式逐个匹配pathinfo中的路径,如果匹配成功,立即初始化并执行该类对应的action。
更加具体的解析,可参考这里,有一篇关于Typecho的路由原理解析,同时还可以在这里速查路由

宣传栏