带参数的Php路由Url

带参数的Php路由Url,php,regex,url,routing,Php,Regex,Url,Routing,我试图解析我的Url到我的路由器类。 首先,一切都很清楚,我的Url将其拆分为一个数组,但目前我的问题是,我需要首先添加我的路由,如$router->adduser/show/123;或$router->addarticle/2584/edit;将它们放入一个数组中,并在其位于数组中时请求,然后加载页面。但是,当我将参数添加到路线中时,我没有找到解决这些参数的方法。我如何使它像$route->addarticle/WHATEVER/edit;所以不管数字是多少,它都会加载页面? 我想是用RegE

我试图解析我的Url到我的路由器类。 首先,一切都很清楚,我的Url将其拆分为一个数组,但目前我的问题是,我需要首先添加我的路由,如$router->adduser/show/123;或$router->addarticle/2584/edit;将它们放入一个数组中,并在其位于数组中时请求,然后加载页面。但是,当我将参数添加到路线中时,我没有找到解决这些参数的方法。我如何使它像$route->addarticle/WHATEVER/edit;所以不管数字是多少,它都会加载页面? 我想是用RegEx,但我不是很擅长或理解它。目前我还不知道该怎么做,我已经在谷歌上搜索过了,但我找到的都是我不想使用的已完成课程,因为我想至少了解它是如何工作的


我很乐意得到一些帮助,一些链接和一些代码片段将给我一个新的观点和继续下去的方式。

我用了一种稍微不同的方式。我采用以下形式的URI:

/controller/action/param1/param2/param3/etc.
我将其路由到index.php?q=using.htaccess,这样通过调用$\u GET['q']就可以访问整个字符串。我使用explode with/作为分隔符将字符串分割成几段,第一个和第二个元素始终是控制器和操作。其他所有内容都是一个字符串,与参数无关,并使用回调转发到相关函数操作。在我的函数例如视图中,我有$param作为参数,$param是一个包含/param1/param2/param3/etc的字符串

在函数中,我进一步将该字符串拆分为各个参数,根据需要将它们分配给常规命名变量

$param = explode('/', $param);
$id = $param[0];
$sortBy = $param[1];
$sortOrder = $param[2];
etc.
显然,我检查参数的有效性,如果参数为空,则使用默认值。我看到的唯一缺点是,无论参数有多少,您都必须提供所有2、3、4,即使您只想更改一个参数。在上面的示例中,我有3个参数,如果我只想更改sortOrder,我的URI将如下所示:

/controller/action/0/0/ASC
使用PHP,我检测到0不是该操作的有效参数,并从我的设置或其他来源为其指定一个默认值。最大的优点是简单,但也可以为每个模块使用无限数量的参数。您不必添加路由,因为这些路由是在控制器(而不是路由文件)中处理的


PS:我知道这不是最佳实践,这是一个非常基本的方法,但它是有效的。根据你想取多少,这个选项可能对你不起作用。< /P>谁做了代码路由机制?我尝试了不同的脚本并进行了实验,但是后来我意识到我需要一个白名单,或者XdWordWords/\D+/EngEt将是中间的任意一个数字,但是Add会做什么呢?这需要正则表达式吗?不,目前它只将参数添加到数组idk中,或者更好地说明如何使用它执行后续步骤。我知道该怎么做,但不知道怎么做。我真的不知道regex模式的东西,也不知道如何编写模式,而且没有好的教程或其他东西。谢谢你的回答@Chris,你的建议是否需要使用任何框架,或者这可以通过核心PHP编码来完成?你能提供一个工作样本项目吗。我将非常感激。ThanksIt只使用核心PHP,但在这个阶段,我建议使用laravel或cakephp之类的框架。恐怕我改用了Python,在那里我使用了flask,所以我没有一个现成的例子,但是有很多关于使用框架在PHP中进行路由的内容