我想做一个简单的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')
。