在php应用程序中构建页面URL

在php应用程序中构建页面URL,php,routing,Php,Routing,我正在运行自己的超轻MVC框架(没有路由器类)。 要知道要运行的控制器和操作,我正在使用应用于请求的库或regexp\u URI。类似于 $regexps = array( '/admin/categories/' => array( 'controller' => 'AdminCategories', 'action' => 'index' ), '/admin/categories/add/' => a

我正在运行自己的超轻MVC框架(没有路由器类)。 要知道要运行的控制器和操作,我正在使用应用于
请求的库或regexp\u URI
。类似于

$regexps = array(
    '/admin/categories/' => array(
        'controller' => 'AdminCategories', 
        'action'     => 'index'
    ),
    '/admin/categories/add/' => array(
        'controller' => 'AdminCategories',
        'action'     => 'add'
    ),
);
一切正常,但是

构建URL的最佳实践是什么?

BuildUrl('Controller', 'action', array('var1' => 'val1', 'var2' => 'val2'));
修改当前url的最佳实践是什么(例如,我有10个不同过滤选项的表)?

ModCurrentUrl(array(...));
如何在应用程序中解决此问题

PS:我没有使用conroller的动作参数,所有参数都取自$\u GET


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

最佳实践(在我看来)是使用静态方法创建一个名为
Routing
(基本上是一个类)的库。然后,您可以使用
Routing::buildUrl(…)
,并用您将使用的所有与uri相关的方法(如modCurrentUrl…

最佳实践(如我所见)是使用静态方法创建一个名为
Routing
(基本上是一个类)的库。然后,您可以使用
Routing::buildUrl(…)
,并用您将要使用的所有与uri相关的方法(如modCurrentUrl…)

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

这里有几个很好的链接: http://code.google.com/p/routemap/ 在您的示例中,我没有看到任何子目录的迹象。在大型项目中,这可能很好。
首先请求获取router类的方法,从中可以获得一些关于路由的实际数据。其次,您将此数据提交给正在启动应用程序的调度程序。

谢谢您的评论!创建静态方法对我来说非常清楚,但我在另一个方面看到了问题。。。例如,您有url
/admin/categories/view/{{id}/?filter1=a&filter2=b
;此url通过
视图
操作路由到
AdminCategories
控制器。现在我想使用
Routing::buildUrl(…)
创建这样的url。我将
数组('id'=>123,'filter1'=>a,'filter2'=>b)
传递到
buildUrl
,并且我面临id参数的问题,因为它在path中,而不是在QUERY\u字符串中。我们可以有很多这样的URL,所以我应该为每个URL创建单独的方法?这是一个设计问题,您需要重新考虑buildUrl()方法,以接受
控制器、操作、pathArray、queryArray
参数,你看到我使用pathArray和queryArray参数得到的结果了吗?基本上,你在单独的变量中传递控制器和操作字符串,所以你的uri看起来像/controller/action。然后,您将获得第三个参数pathArray witch,例如('1'=>'44','path1'=>'param'),您将这些参数添加到最终uri中,使其看起来像路径,因此您的uri应该像/controller/action/1/44/path1/param,或者您可以告诉它只像controller/action/44/param,然后,使用witch的第4个参数,像以前一样构建查询字符串,并将其添加到最终uri中。感谢您的评论!创建静态方法对我来说非常清楚,但我在另一个方面看到了问题。。。例如,您有url
/admin/categories/view/{{id}/?filter1=a&filter2=b
;此url通过
视图
操作路由到
AdminCategories
控制器。现在我想使用
Routing::buildUrl(…)
创建这样的url。我将
数组('id'=>123,'filter1'=>a,'filter2'=>b)
传递到
buildUrl
,并且我面临id参数的问题,因为它在path中,而不是在QUERY\u字符串中。我们可以有很多这样的URL,所以我应该为每个URL创建单独的方法?这是一个设计问题,您需要重新考虑buildUrl()方法,以接受
控制器、操作、pathArray、queryArray
参数,你看到我使用pathArray和queryArray参数得到的结果了吗?基本上,你在单独的变量中传递控制器和操作字符串,所以你的uri看起来像/controller/action。然后,您将获得第三个参数pathArray witch,例如('1'=>'44','path1'=>'param'),您将这些参数添加到最终uri中,使其看起来像路径,因此您的uri应该像/controller/action/1/44/path1/param,或者您可以告诉它只像controller/action/44/param,然后从witch获取第4个参数,像以前一样构建查询字符串,并将其添加到最终的uri中。链接不错,但我说的是另一个操作。构建和修改URL,而不是路由。我说的是同一件事:)从那里查看解决方案,代码非常简单。简而言之,您只需要标记路由的动态元素,比如“controller/action/:id”,然后您就可以在视图(或任何地方)中识别它们以进行动态更改。然后像buildUrl一样动态地构建它们(数组('controller'=>'controller','action'=>'action','id'=>$\u GET['id'])很好的链接,但我说的是另一个操作。构建和修改URL,而不是路由。我说的是同一件事:)从那里查看解决方案,代码非常简单。简而言之,您只需要标记路由的动态元素,比如“controller/action/:id”,然后您就可以在视图(或任何地方)中识别它们以进行动态更改。就像buildUrl一样动态构建它们(数组('controller'=>'controller','action'=>'action','id'=>$\u GET['id'])只解决了你的部分问题,我太忙了,没时间写东西,所以它只是一个注释:只解决了你的部分问题,我太忙了,没时间写东西,所以它只是一个注释: