首页 > 其他分享 >DeerOJ的前端框架介绍-model文件夹

DeerOJ的前端框架介绍-model文件夹

时间:2024-05-30 19:45:46浏览次数:27  
标签:DeerOJ 代码 如下 文件夹 model php 方法 数据库 路由

model文件夹

model文件夹下存储的是一些相关类的php文件,在HTML文件生成的时候,利用这些类能够高效地辅助文件与文件之间的调度转换。文件夹下的内容如下:

这里列举一些重要的类文件:

Route.php文件

前文中在实现 route.php 的路由调度过程中有出现使用类Route的情况,实际上就是调用这里的类Route的相关方法去实现的。这个 Route 类是一个简单的路由器,它可以用于处理基于 URI 和 HTTP 方法的请求路由。它支持添加、匹配和分组路由,以及定义参数模式。下面介绍一下部分重要属性和方法:

Route.php文件的部分属性

  • protected static $routes: 存储所有注册的路由。
  • protected static $patterns: 存储所有自定义的参数模式。
  • protected static $groupStack: 存储当前的路由组属性。

match 方法

代码截图如下:

match方法将指定的 HTTP 方法、URI 和处理动作添加到路由中。其中,array_map('strtoupper', (array)$methods) 将方法名转为大写,便于规范匹配。

any 方法

代码截图如下:

any方法支持任意 HTTP 方法的路由,保证前端调用的时候能够保证所有的基本请求方式都能使用。

各种 HTTP 方法的快捷方式

代码截图如下:

将不同的 HTTP 方法打包在 Route类中,方便实现调用。

group 方法和 getGroup 方法

代码截图如下:

group 方法中,定义一个路由组,将传入的属性和当前组的属性合并,然后执行回调函数。其中,array_pop(self::$groupStack) 在执行完回调函数后恢复上一个路由组的属性。
getGroup 方法则是用于获取当前的路由组属性。

addRoute 方法

代码截图如下:

该方法将一个新路由添加到 $routes 数组中,便于后续对路由的检查。

checkRoute 方法

代码截图如下:

该方法检查当前请求是否匹配某个路由,并匹配请求方法。同时,使用定义的参数模式替换 URI 模式中的占位符。然后匹配 URI 和域名,如果匹配成功,将匹配的参数存储到 $_GET 中。

DB.php 文件

在编写代码的过程中,如果直接调用php中与数据库相关的语句,可能会导致代码可阅读性差,结构混乱从而加大了系统的维护成本。故使用 DB.php 来统一管理与数据库相关的交互操作。DB 类是一个封装了 MySQL 数据库操作的静态类,用于简化数据库操作并提高代码的可读性和可维护性。它使用 PHP 的 mysqli 扩展来与 MySQL 数据库进行交互。下面介绍一下部分重要属性和方法:

初始化数据库连接

初始化Init方法的具体代码如下:

该方法初始化与 MySQL 数据库的连接,并存储在全局变量 $uojMySQL 中。并且,使用 mysqli_connect 函数连接数据库,如果连接失败,输出错误信息并终止程序。

SQL 注入防护

escape 方法的具体代码如下:

该方法使用 mysqli_real_escape_string 函数对输入的字符串进行转义,以防止 SQL 注入攻击。

数据提取方法

fench 方法的具体代码如下:

该方法从查询结果集中获取一行作为关联数组或数字数组。

基本数据库操作

基本的增删改的实现,这里仅给出实现代码,代码如下:

数据选择方法

代码如下:

  • select 方法执行查询并返回结果。
  • selectAll 方法返回查询结果中的所有行。
  • selectFirst 方法返回查询结果中的第一行。
  • selectCount 方法返回查询结果的行数。

检查表是否存在

checkTableExists 方法的具体代码如下:

该方法通过尝试查询表中的一行数据来检查表是否存在。

行数和受影响行数

num_rowsaffected_rows 方法的具体代码实现如下:

其中,num_rows 方法返回结果集中行的数量,affected_rows 方法返回上一次查询中受影响的行数。

标签:DeerOJ,代码,如下,文件夹,model,php,方法,数据库,路由
From: https://www.cnblogs.com/hakurokawashiro/p/18223101

相关文章

  • 模型节点操作学习笔记(1)--SavedModel详解
    参考:使用SavedModel格式 | TensorFlowCore(google.cn) (持续更新)   SavedModel是一个包含序列化签名和运行这些签名所需的状态的目录,其中包含变量值和词汇表。$ls{mobilenet_save_path}assetsfingerprint.pbsaved_model.pbvariablesassets目......
  • DeerOJ的前端框架介绍-libs文件夹和controller文件夹
    libs文件夹在index.php文件初始化的过程中,需要提前准备好一些类和方法,这些类和方法的初始化是调用libs文件夹下的大多数php文件来实现的。libs文件夹下的文件如下:其中,uoj-lib.php文件是进行所有相关初始化的主文件,上级的index.php文件会直接调用该文件展开初始化的工......
  • [后续更新中] DeerOJ的工作原理
    服务端收到请求后,会运行web文件夹下的index.php文件(由同目录下的.htaccess决定)index.php文件的内容截图如下:index.php会加载所需的函数库和类库,具体如下:require$_SERVER['DOCUMENT_ROOT'].'/app/libs/uoj-lib.php';该句是调用/app/libs/下的php文件,用来调用一些......
  • DeerOJ的前端框架介绍-Web文件夹和App文件夹(route.php)
    Web文件夹下的结构DeerOJ的前端框架参考了部分Lavarel框架,做到兼顾代码的可维护性和可阅读性。具体的维护目录文件结构如下:注意到web文件夹下的index.php这是整个前端程序的main程序,当服务段收到请求后,根据.htaccess文件指定使用index.php文件来生成网页,并把网页数......
  • DeerOJ的前端框架介绍-config.php
    config.php文件config.php文件是PHP应用程序的配置文件,具体用于DeerOnlineJudge(DeerOJ)系统的设置。它定义了应用程序的基本信息、数据库连接、Web服务器设置、安全配置、邮件配置、评测机配置以及一些开关设置。基本信息(profile)部分参数解释如下:oj-name:在线......
  • uni.showModel内容换行
    前情最近在做小程序项目,选用有是当前比较火的uniapp技术栈,在产品项目中用到不少的需要引导用户确认后才继续操作的弹框。为什么想到我去换行?其实showModel弹框的content是支持自动换行的,但是自动换行不太可控,有时候会出现很尴尬的情况,如下图:实现content换行通过在想要断行添......
  • WPF MVVM如何在ViewModel直接操作控件对象
    早些年在WPF中使用COM组件时,需要在ViewModel中操作COM组件中的控件对象,但是这个控件对象又不支持绑定,后面的解决办法是在窗口加载时,将控件对象以参数传递到Loaded事件的处理命令中,然后将这个对象记录下来,后面就可以直接操作这个控件了。今天同事在使用WebView2的时候,又遇到这个......
  • Llama模型家族训练奖励模型Reward Model技术及代码实战(二)从用户反馈构建比较数据集
    LlaMA3系列博客基于LlaMA3+LangGraph在windows本地部署大模型(一)基于LlaMA3+LangGraph在windows本地部署大模型(二)基于LlaMA3+LangGraph在windows本地部署大模型(三)基于LlaMA3+LangGraph在windows本地部署大模型(四)基于LlaMA3+LangGraph在w......
  • windows镜像虚拟机创建共享文件夹详细步骤 -- 和本地电脑传输文件
    第一步:关闭客户机第二步:右击“虚拟机名称”或菜单栏的“虚拟机”–>“设置”网络适配器选择NAT或者其他的都可以来到“选项”,启用共享文件夹,具体如下图:点击添加,添加主机文件夹。然后确定 第三步:开启虚拟机,打开虚拟机内的“我的电脑”,如果有下图所示的网络共享文件夹,则......
  • 我创建了一个文件夹/软件包,其中有两个子软件包(第一个=subpkg1,第二个=subpkg2),在subpkg1
    我正在使用VS代码学习Java。我创建了一个文件夹/包(name=pkg)然后,我在该包中创建了两个包(第一个=subpkg1,第二个=subpkg2)但我在subpkg1中创建了一个文件(test1)并从subpkg2中导入文件(name=food)然后编译并运行。我一直收到pkg.subpkg2doesn'texist的错误信息(见......