我试图从一个URL数组获取控制器,方法和查询。事情是这样的:URL正则表达式为PHP框架
'首页/新闻/ [天]/[月]/[塞] /'
我需要一些正则表达式,这将给我下面的:
控制器:家 方法:新闻 参数:天,月,slu 012
对于参数,如果我能以某种方式在括号内获取名称,那么我可以将它们放入PHP中的关联数组中。例如:(“day”=> $ day)。
我真的坚持这一点,并试图寻找几个PHP框架的指导,但没有真正实现我想要的上面,特别是使用正则表达式。
我试图从一个URL数组获取控制器,方法和查询。事情是这样的:URL正则表达式为PHP框架
'首页/新闻/ [天]/[月]/[塞] /'
我需要一些正则表达式,这将给我下面的:
控制器:家 方法:新闻 参数:天,月,slu 012
对于参数,如果我能以某种方式在括号内获取名称,那么我可以将它们放入PHP中的关联数组中。例如:(“day”=> $ day)。
我真的坚持这一点,并试图寻找几个PHP框架的指导,但没有真正实现我想要的上面,特别是使用正则表达式。
preg_match('{/home/news/(?<day>\d{1,2})/(?<month>\d{1,2})/(?<slug>[\w-]+)}',
'/home/news/10/02/foo',
$matches);
$matches
现在
array (
0 => '/home/news/10/02/foo',
'day' => '10',
1 => '10',
'month' => '02',
2 => '02',
'slug' => 'foo',
3 => 'foo',
)
天才,谢谢。 – Hanpan 2009-10-06 09:55:09
如果你总是将不得不/:控制器/:方法/:你还不如使用args来爆炸:
$args = explode('/', $url);
$controllerName = array_shift($args);
$method = array_shift($args);
$controller = new $controllerName;
$response = $controller->$method($args);
嗯,问题是我想先路由我的网址,因为我可能还想要/:controller /:item_id或其他东西。考虑一下,我认为最好的方法是将正则表达式和上面的方法结合起来。非常感谢您的回复。 – Hanpan 2009-10-06 09:51:06
我想你应该将参数委托给“主”控制器甚至是“新闻”方法。这不应该是前端控制者的业务。除此之外,你认为拥有“家庭”控制器是个好主意吗? – middus 2009-10-06 08:41:50
感谢您的回复。其实,家庭控制器只是一个例子,实际上它可能是新闻/文章/ 10/10/news-article-test /。 你是建议我只是采取所有的查询,只是通过我的控制器很多? – Hanpan 2009-10-06 08:52:15