我想创建一个简单的URL到Controller映射,就像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高手,我知道的不够或者可能有点不够。这就是为什么我不想进入一个功能齐全的框架。
答案 0 :(得分:3)
这是我的网址路由框架:
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.method”,如
$map = array(
"/blog/(.+)" => "BlogController.show",
"/blog" => "BlogController.blog",
"/foobar/(\d+)/(\w+)" => "Foobar.stuff",
);
路由函数查找第一个匹配模式,实例化一个类并调用将regexp子组作为参数传递的方法。因此,网址“/ foobar / 123 / hello”将路由到Foobar->stuff(123, 'hello')
。