2
这里是我用此刻的match_url功能构建url包含命名的子模式
function match_url($urls,$url) {
foreach($urls as $regex=>$args) {
$r = str_replace('/','\/',$regex);
preg_match("/$r/i",$url,$matches);
if(count($matches) > 0) {
$dispatch = array();
$args['args'] = array();
if(empty($args) && !empty($matches['controller'])) {
$dispatch['controller'] = $matches['controller'];
$dispatch['action'] = $matches['action'];
} else {
foreach($matches as $k=>$v) {
if(is_string($k)) {
$args['args'][$k] = $v;
}
}
$dispatch = $args;
}
return $dispatch;
}
}
}
这里有一些例子$网址
$urls = array(
'articles/(?P<year>\d{4})' => array('controller'=>'articles','action'=>'show','name'=>'article_view'),
'admin/(?P<controller>[-\w]+)/(?P<action>[-\w]+)' => array(),
'(?P<controller>[-\w]+)/(?P<action>[-\w]+)' => array()
);
以下网址的文章/ 2010将返回像数组:
Array
(
[controller] => articles
[action] => show
[name] => article_view
[args] => Array
(
[year] => 2010
)
)
可正常工作,但现在我想创建一个函数使得w生病让我从给定的网址名称和参数建立一个网址。例如:
$name = "article_view";
$args = array("year"=>2010);
echo url_for($name,$args);
//should output articles/2010
说我有是搞清楚如何我可以从URL的正则表达式与传递ARGS替代变量麻烦的一部分。
有没有一个简单的方法来做到这一点?
在正确的方向任何建议或指针会很好。