”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 创建更好的路由器:处理隐藏输入和删除请求

创建更好的路由器:处理隐藏输入和删除请求

发布于2024-07-31
浏览:147

Creating a Better Router : Handling HIDDEN Inputs and DELETE request

几天前,我学会了构建一个将 URL 映射到控制器的基本路由器。现在,我需要增强它以构建一个具有高级功能的更好的路由器。要构建一个更好的可处理隐藏输入的路由器,首先从项目中删除基本的 router.php 文件并创建一个新的。开始吧。

路由简介

我们需要构建一个更好的路由器,有效地将 URL 映射到特定的控制器或操作,从而允许我们的应用程序处理请求并将它们路由到适当的处理程序。
更好的路由器能够处理隐藏输入,通过将笔记 ID 传递到控制器而不将其暴露在 URL 中,从而实现安全笔记删除,从而防止用户干扰。


创建路由器文件

要创建路由器文件,我们必须使用命名空间初始化 Router 类,在本例中为 Core。





公共函数(公共参数)

随着路由器类的构建,我们必须在其中定义公共函数,并且所有函数都具有相同的参数,例如 get、post、delete、patch 和 put 作为基本路由,帮助我们的网站确定当有人访问某个特定内容时要执行的操作页。这些函数具有相同的参数,使它们能够执行相同的操作。

public function get($uri, $controller) {
 $this->add('GET', $uri, $controller); }
public function post($uri, $controller) {
 $this->add('POST', $uri, $controller); }
public function delete($uri, $controller) { 
$this->add('DELETE', $uri, $controller); }
public function patch($uri, $controller) { 
$this->add('PATCH', $uri, $controller); }
public function put($uri, $controller) { $this->add('PUT', $uri, $controller); }

添加方法

由于所有公共函数都具有相同的参数,因此我们使用 add 方法并为其提供相同的参数,并且仅在其他函数中调用它。它用于向路由映射添加新路由,采用三个参数:请求方法、要匹配的 URI 模式以及处理请求的控制器文件。

public function add($method, $uri, $controller) { 
  $this->routes[] = [ 
    'uri' => $uri, 
    'controller' => $controller, 
    'method' => $method 
  ]; 
}

路线方法

在这里,我们定义了路由方法来确定应用程序对给定 URL 的响应,并将其映射到相应的控制器来处理请求。

public function route($uri, $method) { 
  foreach ($this->routes as $route) { 
    if ($route['uri'] === $uri && $route['method'] === strtoupper($method)) { 
      return require base_path($route['controller']); 
    } 
  } 
  $this->abort(); 
}

strtoupper 函数

在route方法中,我们使用strtoupper函数将字符串转换为大写,确保不区分大小写的匹配。

strtoupper($method)

保护功能(中止)

在 router.php 文件中,我们将 abort 方法定义为安全网,如果我们的网站找不到正确的路由,则显示错误页面。

protected function abort($code = 404) { 
  http_response_code($code); 
  require base_path("views/{$code}.php"); 
  die(); 
}

路线定义

最后一件事是在routes.php文件中定义路由配置,将URL映射到相应的控制器操作。

$router->get('/', 'controllers/index.php'); 
$router->get('/about', 'controllers/about.php'); 
$router->get('/contact', 'controllers/contact.php'); 
$router->get('/notes', 'controllers/notes/index.php'); 
$router->get('/note', 'controllers/notes/show.php'); 
$router->get('/notes/create', 'controllers/notes/create.php');

get 方法指定请求方法(GET)、URL 模式并将其映射到控制器文件。

结论

总而言之,我们构建了一个更好的路由器,可以有效地将 URL 映射到特定的控制器方法,从而实现更加结构化和可维护的方法来处理请求并提高我们网站的整体性能和可扩展性。

希望您已经清楚地理解了。

版本声明 本文转载于:https://dev.to/ghulam_mujtaba_247/creating-a-better-router-handling-hidden-inputs-and-delete-request-ei7?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 我应该在调用 `condition_variable.notify_one()` 之前获取锁吗?
    我应该在调用 `condition_variable.notify_one()` 之前获取锁吗?
    在调用condition_variable.notify_one()之前何时应该获取锁?在多线程编程中,condition_variables用于向等待线程发出信号已满足特定条件。虽然在调用condition_variable.wait()之前需要持有锁,但在调用notify_one()之前是否也需...
    编程 发布于2024-12-23
  • 如何使用 jQuery 将 Onclick 事件附加到动态添加的元素?
    如何使用 jQuery 将 Onclick 事件附加到动态添加的元素?
    如何使用 jQuery 将 Onclick 事件绑定到动态添加的 HTML 元素使用 jQuery 时,经常需要动态添加 HTML 元素页面。在这种情况下,您可能需要将事件处理程序附加到这些元素。然而,将事件处理程序附加到页面加载后添加的元素可能具有挑战性。问题和先前的解决方案传统上,可以使用 .b...
    编程 发布于2024-12-23
  • 在 Pygame 中加载资源时如何修复“FileNotFoundError”?
    在 Pygame 中加载资源时如何修复“FileNotFoundError”?
    使用 Pygame 加载资源:解决“FileNotFoundError”当尝试在 Pygame 中加载图像或声音等外部资源时,您可能会遇到“FileNotFoundError:没有这样的文件或目录”错误。此问题通常是由于资源文件路径不正确造成的,特别是当路径相对于当前工作目录时。解决方案:设置工作目...
    编程 发布于2024-12-23
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-23
  • Go泛型的联合约束可以在没有显式接口声明的情况下调用共享方法吗?
    Go泛型的联合约束可以在没有显式接口声明的情况下调用共享方法吗?
    Go 泛型中调用联合约束的方法在 Go 泛型(v1.18)中,你可能会遇到限制类型联合约束的类型将参数类型转换为实现统一接口的类型。然而,无法在受约束类型之间调用共享方法引起了人们对此类约束的实用性的担忧。考虑以下代码:type A struct {} type B struct {} type A...
    编程 发布于2024-12-23
  • 如何在 TypeScript 中执行运行时接口类型检查?
    如何在 TypeScript 中执行运行时接口类型检查?
    TypeScript 中的接口类型检查在 TypeScript 中,您可能会遇到这样的场景:在运行时确定对象是否符合预定义接口至关重要。虽然利用instanceof关键字进行类类型检查很简单,但将其应用于接口却提出了挑战。传统方法(例如依赖instanceof运算符)被证明是无效的,因为接口在编译的...
    编程 发布于2024-12-23
  • 如何使用超时取消长时间运行的 Python 函数?
    如何使用超时取消长时间运行的 Python 函数?
    用超时取消长时间运行的函数调用执行包含可能停顿函数的复杂脚本时,需要提供一种方法如果这些函数超过指定的执行时间,则终止它们。这可确保脚本不会变得无响应或无限期地卡住。在 Python 中,利用信号包(在 UNIX 系统上可用)为该问题提供了解决方案。通过注册信号处理程序,您可以设置函数调用的超时。如...
    编程 发布于2024-12-23
  • React 性能优化技术:记忆化、延迟加载等
    React 性能优化技术:记忆化、延迟加载等
    构建现代 Web 应用程序时,性能是关键。用户期望应用程序快速、响应灵敏,即使是轻微的延迟也会导致沮丧。 React 虽然功能强大,但有时会遇到性能瓶颈,尤其是当应用程序规模和复杂性不断增长时。幸运的是,有多种技术可以优化性能,包括记忆、延迟加载等等。 在本指南中,我们将详细介绍一些优化 React...
    编程 发布于2024-12-23
  • Java 中初始大小设置如何影响 ArrayList 性能?
    Java 中初始大小设置如何影响 ArrayList 性能?
    了解 ArrayList 的初始大小设置在 Java 中,ArrayList 类允许您在实例化期间指定初始大小,确保记忆效率。但是,区分初始大小和列表容量非常重要。虽然初始大小决定列表中元素的初始数量,但它不会在特定索引处预先分配空间。相反,它定义了底层数组的容量,使其能够容纳更多元素,而无需在低索...
    编程 发布于2024-12-23
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-23
  • 如何根据对象的ID属性高效地查找数组条目?
    如何根据对象的ID属性高效地查找数组条目?
    根据对象属性识别数组条目考虑一个对象数组,每个对象都拥有一个“ID”属性。为了找到与变量“$v”中存储的特定“ID”值相对应的条目,我们探索了几种方法:1。迭代搜索这涉及顺序迭代数组,将每个对象的“ID”属性与所需值“$v”进行比较。$item = null; foreach($array as $...
    编程 发布于2024-12-23
  • 参数化单元测试如何简化 Python 测试生成?
    参数化单元测试如何简化 Python 测试生成?
    Python 中的参数化单元测试:动态测试生成指南在软件开发中,测试对于确保可靠性和可靠性起着至关重要的作用。我们的代码的准确性。单元测试尤其涉及为特定功能或模块创建单独的测试。然而,在处理大型数据集或复杂的测试场景时,为每个参数手动编写测试变得很费力。参数化测试:动态测试生成的解决方案参数化测试,...
    编程 发布于2024-12-23
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-23
  • 如何在 PHP 中从 URL 中提取子域?
    如何在 PHP 中从 URL 中提取子域?
    在 PHP 中从 URL 检索子域识别 URL 中的子域可能是各种 Web 应用程序中的常见任务。本文探讨 PHP 从给定 URL 中提取子域名的功能。提取子域名的函数PHP 不提供检索子域名的内置函数。但是,使用 array_shift() 和explode() 函数有一个简单的解决方法:func...
    编程 发布于2024-12-23
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-23

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

Copyright© 2022 湘ICP备2022001581号-3