2011-01-11 12 views
2

我正在运行我自己的非常轻的MVC框架(没有Router类)。 要知道什么控制器和动作来运行我正在使用库或正则表达式应用于REQUEST_URI。喜欢的东西...在php应用程序中构建页面url

$regexps = array(
    '/admin/categories/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'index' 
    ), 
    '/admin/categories/add/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'add' 
    ), 
); 

一切工作正常,但...

什么是建立网址的最佳实践?

BuildUrl('Controller', 'action', array('var1' => 'val1', 'var2' => 'val2')); 

什么是修改当前的URL(,例如我有10个不同的过滤选项表)的最佳实践?

ModCurrentUrl(array(...)); 

如何解决您的应用程序中的这个问题?

PS:我没有使用控制器的动作参数,所有参数都从$ _GET中获取。

谢谢你,对不起我的英文。

+0

只解决了您的部分问题,并且忙于写点东西,所以它只是一个评论:http://us2.php.net/manual/en/function.http-build-query.php – Gordon 2011-01-11 13:20:35

回答

0

最佳实践(正如我所看到的)将有一个名为Routing(基本上是一个类)的静态方法库。然后,您可以使用Routing::buildUrl(...),并与所有的URI填充相关的方法,你会使用(如modCurrentUrl ...)

+0

谢谢为了您的评论!创建静态方法对我来说很清楚,但是我在另一个方面看到了问题......例如,您有url`/ admin/categories/view/{{id}} /?filter1 = a&filter2 = b`;这个URL通过`view`动作路由到`AdminCategories`控制器。现在我想用`Routing :: buildUrl(...)`创建这样的URL。我将`array('id'=> 123,'filter1'=> a,'filter2'=> b)`传递给`buildUrl`,并且由于它在路径中而面临着id参数的问题,但不在QUERY_STRING中。我们可以有很多这样的URL,所以我应该为每个创建分离的方法? – Kirzilla 2011-01-11 11:14:46

+0

这是一个设计问题,您需要重新考虑buildUrl()方法,接受`controller,action,pathArray,queryArray`参数,您是否看到我在哪里使用pathArray和queryArray参数?请给我, – 2011-01-11 11:20:36

0

这里是你对很好的链接: http://robap.github.com/php-router/ http://code.google.com/ p/routemap/ 我的例子中没有看到子目录的任何迹象。在大项目中,它可以很好。 首先请求到路由器类的方法,从那里你可以得到一些关于路由的实际数据。其次,您将这些数据发送给启动应用程序的调度程序。