我正在为轻量级MVC框架创建自己的url路由器类。我正在实现一个简单的基于数组的系统,并通过一系列循环确定参数的位置等等。我已经阅读了django书,并且喜欢他们只是匹配模式的系统,并调用类和方法,如果模式匹配。我有它运作良好,但我坚持绘制两种不同的模式,并且我承认我不是正则表达式中最好的。
所以我有一个url模式数组和相应的类/方法:
'/^\/users\/(?P<username>\w+)$/' => array('class' => 'userController', 'method' => 'detailUserAction'),
'/^\/users\/update$/' => array('class' => 'userController', 'method' => 'updateUserAction'),
并且第一个模式总是匹配在以/ users开头的任何其他模式之前,并且之后还有其他内容。
稍后在代码中我循环遍历数组并执行此代码:
if (preg_match($urlPattern, $pathString, $matches)){
$this->invokeObject($command, $matches);
exit;
}
关于我可以用什么模式来区分这两个网址的任何想法?
一个是/ users / username
,另一个是/ users / update
我想我总是可以在数组的顺序中首先包含其他的,这是我最好的选择吗?
答案 0 :(得分:0)
我认为在这种情况下应该优化URI设计。如果用户被称为“更新”,“添加”或“删除”,该怎么办?它会在您的用户名模式中添加特殊情况,并且将来不易维护/扩展。
但是如果意味着用户id,我认为您可以将子模式更改为(?P \ d +),这可以消除歧义。