带参数

时间:2017-03-18 14:46:26

标签: php regex url routing

我尝试将我的Url解析为我的路由器类。 对于开始,一切都很清楚,我将我的Url拆分为数组,但我现在的问题是我需要先添加我的路由,如$router->add("user/show/123");$router->add("article/2584/edit");将它们推入数组并请求它在数组中然后加载页面。但是当我将它们添加到路径时,我找不到解决参数的方法。我如何使它像$route->add("article/WHATEVER/edit");那样加载页面,无论数字是多少? 我想使用RegEx,但我并不擅长或理解它。并且目前没有想法如何做到这一点我已经谷歌搜索和搜索但我发现所有完成的课程,我不想使用因为我想了解它至少如何工作。

我很乐意为一些链接和一些代码片段提供一些帮助,这些代码片段将为我提供一个新的观点和方法。

1 个答案:

答案 0 :(得分:1)

我的采掘方式略有不同。我采用以下形式的URI:

/controller/action/param1/param2/param3/etc.

我使用.htaccess将其路由到index.php?q =,因此可以通过调用$ _GET ['q']来访问整个字符串。我通过使用/作为分隔符使用explode将字符串拆分为多个部分,并且第一个和第二个元素始终是控制器和操作。其他所有内容都是一个字符串(与参数无关),并使用回调将其转发到相关的函数(操作)。在我的函数(例如,视图)中,我有$ 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:我知道这不是最佳做法,这是非常基本的方法,但它确实有效。根据您想要采取的程度,此选项可能对您不起作用。