自定义PHP URL到控制器的映射类似于Symfony2


Custom PHP URL to Controller mapping similar to Symfony2

我想做一个简单的URL到控制器映射,就像Symfony2做的那样。但这就是我想从Symfony2中得到的,其他的对我来说太多了。

对于那些不知道Symfony2是做什么的人:

blog_home:
    pattern:   /blog
    defaults:  { _controller: BlogBundle:Blog:index }
blog_show:
    pattern:   /blog/{slug}
    defaults:  { _controller: BlogBundle:Blog:show }

在YAML配置文件。

YAML对我来说一点也不重要。我只是想达到同样的功能。能够将自定义url映射到控制器函数。

也许是一个开源的映射类或路由框架?也许是一些教程?有自己的想法吗?任何建议都会有帮助的。 我应该说一下,我不是PHP高手,我知道的刚刚好,或者可能不够。这就是为什么我不想进入一个功能齐全的框架

这是我的url路由框架:

function route($url, $map) {
    foreach($map as $re => $fn) {
        if(preg_match("~^$re$~", $url, $args)) {
            list($class, $method) = explode(".", $fn);
            return call_user_func_array(
                array(new $class, $method),
                array_slice($args, 1));
        }
    }
    error_404();
}

$map是一个数组,它的键是用来匹配url的正则表达式,值是字符串"ClassName "。法",就像

$map = array(
    "/blog/(.+)"          => "BlogController.show",
    "/blog"               => "BlogController.blog",
    "/foobar/('d+)/('w+)" => "Foobar.stuff",
);

路由函数找到第一个匹配的模式,实例化一个类,并调用一个传递regexp子组作为参数的方法。因此,url "/foobar/123/hello"将被路由到Foobar->stuff(123, 'hello')