”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 用 PHP 创建一个简单的页面路由器

用 PHP 创建一个简单的页面路由器

发布于2024-11-07
浏览:161

创建文件

首先,我们将创建index.php、router.php和.htaccess文件。

将所有请求重定向到.htaccess 中的index.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

防止直接访问router.php

如果用户直接输入访问router.php的url,此代码将显示404响应。

在router.php中添加Page类

class Page
{
  protected static bool $Return_404 = true;
}

创建一个静态布尔变量用于返回404页面。我们将其默认设置为 true。
现在我们为404页面添加一个功能。

protected static function Return_404(): void
    {
       (file_exists("./Pages/404.php")) ?  require_once "./Pages/404.php" : http_response_code(404);
    }

这里,我将404页面放入Pages文件夹中。您可以将其放入任何您想要的文件夹中。

我们还将添加“文件”功能。

protected static function File(string $file): string
{
    if (!empty($file)) {
        (str_contains($file, "?")) ? $file = strtok($file, '?') : $file;
        ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file;
    }
    return $file;
}

该函数将检查请求url是否包含查询字符串或以“/”结尾并将其删除。
我使用“strok”字符串函数来获取“?”之前的字符串值。我知道“strok”不应该这样使用,但它确实有效,可以让我免于不必要地执行复杂的算法。我使用“rtrim”字符串函数来删除“/”(如果它包含在字符串的最后)。

在router.php中添加Routes类

class Routes
{
    public static array $Route = array(
        "" => "Pages/home.php",
        "/about" => "Pages/about.php",
    );
}

这里,我创建了一个静态数组来存储路由。
该数组包含“请求的 url”=>“文件位置”。
我把所有页面文件放在Pages文件夹中。你可以把它们放在任何你想要的地方。

在router.php中添加Router类

Router 类将从我们上面创建的 Page 类扩展。
请注意,“”=>“Pages/home.php”用于主页。

class Router extends Page
{

}

现在,我们将编写检查请求的文件是否存在于 Router 类中的函数。

   public static function Run(): void
    {
        $requested_file = self::File($_SERVER["REQUEST_URI"]);
        foreach (Routes::$Route as $request => $file) {
            if ($requested_file === $request) {
                if (file_exists($file)) {
                    self::$Return_404 = false;
                    require $file;
                } else echo "Error";
            }
        }
        if (self::$Return_404) self::Return_404();
    }

该函数首先检查请求的文件是否在 $Route 数组中。如果存在,则将静态布尔值 $Return_404 设置为 false,以便 404 页面不会显示并获取页面文件。如果不存在,将返回 404 页面。
如果存在但Pages文件夹中没有文件,该函数将回显“错误”。您可以在此处显示 404 页面而不是 echo“Error”。

最终的 router.php 文件将如下所示。

 $file) {
            if ($requested_file === $request) {
                if (file_exists($file)) {
                    self::$Return_404 = false;
                    require $file;
                } else echo "Error";
            }
        }
        if (self::$Return_404) self::Return_404();
    }
}
class Routes
{
    public static array $Route = array(
        "" => "Pages/home.php",
        "/about" => "Pages/about.php",
    );
}

索引.php

在index.php中,我们将使用Router类中的“Run”函数。


Router

页面中的所有 HTML 代码都将位于“body”标签中。

创建页面

最后,在Pages文件夹中创建home.php、about.php和404.php。

home.php

Home page

about.php

about page

404.php

404 page

检查代码是否与“xampp”或“PHP server”扩展一起工作。

如果您遇到错误,请随时告诉我。 XD

您还可以检查 github 存储库:

Creating a simple page router in PHP 时银 / 页面路由器

来自 php-router 存储库的手动路由器

版本声明 本文转载于:https://dev.to/kohtet_gintoki/creating-a-simple-page-router-in-php-2hpf?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • JavaScript 中最大的错误(以及如何避免它们)
    JavaScript 中最大的错误(以及如何避免它们)
    JavaScript 是一种非常强大且适应性强的语言,但它也可能存在难以检测的问题。在这篇博客文章中,我们将探讨开发人员在使用 JavaScript 时发现的五个最常见的缺陷,以及这些问题的原因和解决方案。无论您是经验丰富的开发人员还是刚刚起步的开发人员,了解这些常见危险都会为您节省故障排除时间。 ...
    编程 发布于2024-11-07
  • 限制 Laravel 模型上的急切加载关系
    限制 Laravel 模型上的急切加载关系
    介绍 有时,当您渴望在 Laravel 模型上加载关系时,您可能希望限制返回的相关模型的数量。 例如,在博客平台上,您可能希望加载系统中的每位作者及其三篇帖子。 在 Laravel 的旧版本中,限制急切加载的关系是一项有点繁琐的任务。我从来没有真正找到一种感觉正确的优雅方式来做到这...
    编程 发布于2024-11-07
  • 如何使用 GDB 在 C++ 中打印向量元素?
    如何使用 GDB 在 C++ 中打印向量元素?
    通过 GDB 在 C 中打印向量元素在 GDB 中调试 C 代码时,检查 std::vector 的内容可能具有挑战性。例如,考虑一个名为 myVector 的 std::vector。我们如何有效地打印它的元素?在 GCC 4.1.2 中,解决方案涉及访问向量的内部指针 myVector._M_i...
    编程 发布于2024-11-07
  • 如何在不同浏览器中自定义下拉列表宽度?
    如何在不同浏览器中自定义下拉列表宽度?
    IE 下拉列表宽度修改在 Internet Explorer 中,下拉列表镜像其保管箱的宽度,而在 Firefox 中,它会适应内容。此限制需要扩展保管箱以容纳最长的选择,从而导致网页美观不美观。基于 CSS 的可变宽度解决方案要克服此问题,使用 CSS 允许下拉框和下拉列表使用不同的宽度,请考虑以...
    编程 发布于2024-11-07
  • 在 C++ 中格式化时如何右对齐输出字符串?
    在 C++ 中格式化时如何右对齐输出字符串?
    在 C 中通过右对齐格式化输出字符串 处理包含数据(例如坐标)的文本文件时,需要对齐列中的项目经常出现正确格式化的问题。在 C 中,输出字符串的操作对于实现这种对齐至关重要。本文解决了输出字符串右对齐的问题,提供了使用标准 C 技术的解决方案。为了处理输入文本文件,使用 line.split() 函...
    编程 发布于2024-11-07
  • CSS 渐变生成器
    CSS 渐变生成器
    欢迎来到“免费 CSS 工具”系列。 在本系列中,我们将找到完全免费且易于使用的 CSS 工具。 在解释了如何使用该工具后,我将与您分享该工具的链接。 工具链接:此工具可在 webdevtales.com 上获得 工具1:CSS渐变生成器 工具查看: 介绍 欢迎使用 CSS 渐变生...
    编程 发布于2024-11-07
  • 为什么小型函数会让你成为编码英雄的原因
    为什么小型函数会让你成为编码英雄的原因
    嘿,代码爱好者们! ?您是否曾经发现自己迷失在无尽的线条海洋中,想知道一个功能在哪里结束,另一个功能从哪里开始?我们都去过那里。今天,我们来谈谈为什么将代码分解成更小的、可管理的块不仅仅是一种最佳实践——它还能改变你的开发技能和职业生涯。 1.未来的你会感谢你 想象一下:现在是凌晨 ...
    编程 发布于2024-11-07
  • JavaScript 变量名称中美元符号的含义是什么?
    JavaScript 变量名称中美元符号的含义是什么?
    为什么在 JavaScript 变量名称中使用美元符号?提供的 JavaScript 代码包含一个名为“$item”的变量,该变量引发问题:变量名中美元符号的用途是什么?在 JavaScript 中,变量名前面的美元符号对于解释器来说没有特殊含义。它用作轻松识别包含 jQuery 对象的变量的约定,...
    编程 发布于2024-11-07
  • Laravel 中的授权 - 初学者指南
    Laravel 中的授权 - 初学者指南
    掌握 Laravel 中的授权:Gates 与策略类 ?? 在现代 Web 应用程序中,控制谁可以访问或修改资源至关重要。例如,在博客应用程序中,您可能希望确保只有帖子的所有者才能编辑或删除它。 Laravel 提供了两种优雅的方式来处理授权:Gates 和 Policy Clas...
    编程 发布于2024-11-07
  • Laravel 的枚举
    Laravel 的枚举
    报告 在我从事的一个项目中,有一个选择字段定义了不会更改的值。因此,为了列出此选择中的项目,我决定创建一个枚举类,然后描述这些值。但是,该项目需要支持英语和西班牙语,并且选择选项的文本需要适应这一点,同时又不丢失对相应枚举项的引用。换句话说,如果我选择了“马”这个项目,我需要系统知道这个项目仍然是“...
    编程 发布于2024-11-07
  • \“模块 vs 主要:现代英雄 vs package.json 的复古传奇!\”
    \“模块 vs 主要:现代英雄 vs package.json 的复古传奇!\”
    什么是模块字段? package.json 中的 module 字段指定 ESM(ES6 模块) 的入口点。与为 CommonJS 模块 (require()) 设计的 main 字段不同,模块用于支持较新的 ESM 标准的目标环境,例如 JavaScript 捆绑程序(Webpa...
    编程 发布于2024-11-07
  • 如何在 CSS 文件中实现类似变量的行为?
    如何在 CSS 文件中实现类似变量的行为?
    CSS 文件中的变量声明和使用在 CSS 中,通常需要在整个样式表中重用特定值。虽然没有明确的变量声明语法,但有一些技术可以实现此功能。一种方法是利用 CSS 选择器和样式规则。通过将相关样式组合在单个规则下,您可以避免重复,同时澄清每种样式的范围。例如:/* Theme color: text *...
    编程 发布于2024-11-07
  • 如何在 PHP 中编写基本函数来从文本中删除表情符号?
    如何在 PHP 中编写基本函数来从文本中删除表情符号?
    用 PHP 编写一个简单的 removeEmoji 函数处理在线文本通常需要删除表情符号,特别是在 Instagram 评论等情况下。本文探讨了针对这种需求的解决方案,利用 PHP preg_replace 函数来有效地消除给定文本中的表情符号。removeEmoji 函数利用一系列正则表达式来匹配...
    编程 发布于2024-11-07
  • Slim 和 Flight PHP 框架比较
    Slim 和 Flight PHP 框架比较
    为什么要使用微框架? 在社交媒体上,新的 PHP 开发人员经常会问“我的项目应该使用什么框架”,通常给出的答案是“Laravel”或“Symfony”。 虽然这些都是不错的选择,但这个问题的正确答案应该是“你需要框架做什么?” 正确的框架应该能够满足您的需要,并且不会包含大量您永远...
    编程 发布于2024-11-07
  • 如何构建您的第一个 Python 游戏:使用 PyGame 创建简单射击游戏的分步指南
    如何构建您的第一个 Python 游戏:使用 PyGame 创建简单射击游戏的分步指南
    Hi lovely readers, Have you ever wanted to create your own video game? Maybe you’ve thought about building a simple shooter game where you can move ar...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3