首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有参数的简单Php路由器

带有参数的简单Php路由器
EN

Stack Overflow用户
提问于 2021-08-03 19:22:09
回答 2查看 243关注 0票数 1

我试图在PHP中建立一个非常简单的路由系统。现在它看起来像这样:

代码语言:javascript
复制
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);
}

这是正常工作,但我需要密码重置接受参数。就像这样:

代码语言:javascript
复制
 else if($url === "/password-reset/[pattern here]") {
    $page = '../private/pass-reset.php?param=[pattern]';
  }

参数总是不同的,所以我需要它接受包含字母和数字的字符串,类似于([a-zA-Z0-9]).。我尝试过使用preg_match(),但是似乎没有什么效果。

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-03 20:29:53

为了保持简单起见,您只需检查URL的第一部分,看看它是否与该路由匹配。

代码语言:javascript
复制
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部分的具体方式并不重要,只要它正常工作。

票数 1
EN

Stack Overflow用户

发布于 2021-08-03 19:39:24

您可以像这样使用explode()函数:

代码语言:javascript
复制
 $url = "/password-reset/somevalue";
 $url = explode('/', $url);
 if($url[1] === "password-reset") {
    $page = '../private/pass-reset.php?param='.$url[2];
  }

explode()函数$url变量之后,如下所示:

代码语言:javascript
复制
$url = Array
(
    [0] => 
    [1] => password-reset
    [2] => somevalue
)

$page变量如下所示:$page =./private/pass-reset.php?param=somevalue

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68641743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档