我试图在PHP中建立一个非常简单的路由系统。现在它看起来像这样:
function router() {
if($url === '/login') {
$page = '../private/login.php';
}
else if($url === '/password-recovery') {
$page = '../private/pass-rec.php';
}
else if($url === "/password-reset") {
$page = '../private/pass-reset.php';
}
include_once($page);
}这是正常工作,但我需要密码重置接受参数。就像这样:
else if($url === "/password-reset/[pattern here]") {
$page = '../private/pass-reset.php?param=[pattern]';
}参数总是不同的,所以我需要它接受包含字母和数字的字符串,类似于([a-zA-Z0-9]).。我尝试过使用preg_match(),但是似乎没有什么效果。
任何帮助都将不胜感激!
发布于 2021-08-03 20:29:53
为了保持简单起见,您只需检查URL的第一部分,看看它是否与该路由匹配。
else if (substr($url, 0, 15) === "/password-reset") {
$page = '../private/pass-reset.php';
$param = substr($url, 16);
}您不应该像在问题中的第二个代码块中那样,将参数添加到$page变量中,因为您将在include_once()中使用$page。如果您要重定向到该页面,您可能希望这样做,但是由于include_once将在文件系统中查找它,因此将参数添加到路径将使其无法工作。
如我所示,如果提取参数,所包含的文件将访问该$param变量以及$url和范围内的任何其他变量。
同样的想法也适用于explode(),就像其他答案显示的一样,或者适用于preg_match()。(我不知道为什么preg_match不适合你,但它一般都会起作用的。)获取URL部分的具体方式并不重要,只要它正常工作。
发布于 2021-08-03 19:39:24
您可以像这样使用explode()函数:
$url = "/password-reset/somevalue";
$url = explode('/', $url);
if($url[1] === "password-reset") {
$page = '../private/pass-reset.php?param='.$url[2];
}在explode()函数$url变量之后,如下所示:
$url = Array
(
[0] =>
[1] => password-reset
[2] => somevalue
)$page变量如下所示:$page =./private/pass-reset.php?param=somevalue
https://stackoverflow.com/questions/68641743
复制相似问题