ThinkPHP 8.x MVC 数据库用户增加功能demo实现

news2024/11/20 23:28:28

ThinkPHP MVC 数据库用户增加功能实现

在thinkphp 多应用的项目中, 采用MVC的架构实现 增加用户的功能。

在多应用下的controller下创建UserInfo.php ,创建一个和用户信息相关操作的控制器。

定义一个插入信息的方法,这里叫insertUserInfo

在这里插入图片描述

我们要执行一个用户插入的操作,首先要判断请求 -> 接收参数 -> 处理参数 -> 返回信息

其中处理参数的过程在模型中进行处理. 这里我是直接展示了完整的代码。

public function insertUserInfo()
    {
//        判断是否为POST请求
        if (\request()->method() == "POST") {
//            接收POST请求
            $post = request()->param();
            //调用模型中的方法进行执行添加操作
            $rt = User::add($post);
            //返回信息
            dump($rt);
        } else {
            //如果不是POST请求,则返回视图
            return View::fetch();
        }
    }

在非POST请求时,需要展示视图的信息, 我们这里先去写View.根据命令规则在 多应用的目录下创建 view -> user_info 目录

创建insert_user_info.html文件夹.

当我们返回视图时,视图文件的命名不规范时,页面会产生如下报错。

在这里插入图片描述

创建的内容如下即可,我们只是简单演示操作,完整整个流程,对页面没有太大的要求。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>用户注册</h1>
<form action="" method="post">
    用户名:<input type="text" name="username" ><br>
    密码 :<input type="password" name="password" ><br>
    <button>提交注册</button>
</form>
</body>
</html>

在这里插入图片描述

到了这里我们就需要去写模型.但是在此之前,我们需要对数据进行校验,所以先去写验证器。

在多应用目录下创建validate 文件夹,创建 验证类文件 并继承 Validate. 命名无要求。如下

关于验证器更多 内置规则 的使用及说明可以参考官网文档 内置规则 - ThinkPHP官方手册

<?php

namespace app\admin\validate;

use think\Validate;

class User extends Validate
{
	#这里我们接收两个参数,所以规则定义两个即可. 这里我只验证了必填项 以及密码只能为数字,字母,下划线
    protected $rule = [
        'username'=>'require',
        'password'=>'require|alphaDash'
    ];

    protected $message = [

        'username.require'=>'用户名不能为空',
        'password.require'=>'密码不能为空',
        'password.alphaDash'=>'密码只能为数字、字母、下划线和-'
    ];
}

在这里插入图片描述

到了最后一步,我们需要去写真正的操作代码.也就是MVC 中的M 即模型。

定义一个模型类 并继承Model ,命名为数据库的表名 创建一个静态方法 , 我们执行的 增加操作,这里我就直接 定义为 add.

这里要注意的是 在database.php中设置了 prefix 即数据库表前缀 的话,就不需要添加前缀了.否则需要添加前缀。

在该模型中,我们需要进行的操作就是 接收数据-> 验证数据 -> 处理数据-> 返回信息

其中接收数据的操作,很简单,设置一个形参即可. 真正接收的代码,我们已经在控制器中写完了 。

验证数据的具体规则我们也写完了. 在这里我们可以直接通过validate 进行调用。如下

其中, User是指的验证类. batch 代表全部验证,如果没有的话,则会验证一个不符合的就停止. check() 就是接收参数。

 \validate(\app\admin\validate\User::class)->batch(true)->check($post);

验证之后,就要 处理数据,我们可以直接调用create 进行创建数据。

为了返回一个优雅的信息,我们通过异常处理进行数据的二次加工。

其中ValidateExceptionException 的区别, 就是 ValidateException 只会返回验证的异常,而 Exception 会返回整合系统的代码异常,

在实际的环境中,代码的报错,我们肯定是不会想让使用者看到的,所以定义一个返回信息,即 系统错误,。

try {
            \validate(\app\admin\validate\User::class)->batch(true)->check($post);
            self::create($post);
            $arr = ["code"=>0,'msg'=>"添加成功"];

        }catch (ValidateException $e){
            $arr = ["code"=>1,'msg'=>$e->getError()];

        }catch (\Exception $e){
            $arr = ["code"=>2,'msg'=>'系统错误'];
       }
       return $arr;

然后进行测试

密码为空的情况下

在这里插入图片描述

用户名与密码皆为空的情况下

在这里插入图片描述

密码存在特殊字符

在这里插入图片描述

验证通过的情况下

在这里插入图片描述在这里插入图片描述

数据库中成功添加了文件。

在这里插入图片描述

增加跳转

由于安全性原因,6.1版本移除核心对think-filesystem库的依赖,因此6.0版本升级至6.1版本后,需要单独安装topthink/think-filesystem库。

通过如下命令添加Jump

composer require liliuwei/thinkphp-jump

然后在控制器引用。

在这里插入图片描述

同时我们需要将模型中的返回数组转换为字符串。这里我们通过implode 进行转换。

$arr = ["code"=>1,'msg'=> implode(',',$e->getError())];

同时在控制器添加判断

  判断是否为POST请求
        if (\request()->method() == "POST") {
//            接收POST请求
            $post = request()->param();
            //调用模型中的方法进行执行添加操作
            $rt = User::add($post);
            //返回信息
//            dump($rt);
			#根据状态码判断返回类型。
            if($rt['code'] == 0){
                $this->success($rt['msg']);
            }else{
                $this->error($rt['msg']);
            }
        } else {
            //如果不是POST请求,则返回视图
            return View::fetch();
        }

默认跳转到来源页面.更多的配置请直接参考官方文档。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1111760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Doris (四十五): Doris数据更新与删除 - Sequence 列

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 基本原理

EtherNet/IP转Modbus TCP协议网关的接口

远创智控的YC-EIPM-TCP网关产品&#xff0c;它有什么作用呢&#xff1f;一起来了解一下吧&#xff01; 远创智控YC-EIPM-TCP网关产品可以通过各种数据接口和工业领域的仪表、PLC、计量设备等产品连接&#xff0c;实时采集这些设备中的运行数据、状态数据等信息&#xff0c;并把…

数字秒表verilog电子秒表跑表,代码/视频

名称&#xff1a;数字秒表verilog电子秒表跑表 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 设计电子秒表&#xff0c;秒表时间精确到0.01秒&#xff0c;可通过按键控制秒表启动、暂停、复位。 代码需要在Mini_Star开发板验证。 开发板资料&…

【springboot异常处理】

这里写自定义目录标题 1&#xff0c;Java Servlet规范异常处理触发异常 2&#xff0c;tomcat 异常处理实现tomcat请求处理流程异常发生时核心处理类 3&#xff0c;springmvc 异常定制以及扩展请求处理流程使用ControllerAdvice & ExceptionHandler 配置全局异常处理器未配置…

全面的Docker快速入门教程

前言&#xff1a; 都2023年了&#xff0c;你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗&#xff1f;你还在解决开发环境能够正常访问&#xff0c;而发布正式环境无法正常访问的问题吗&#xff1f;你还在为持续集成和持续交付&#xff08;CI / CD&#xff09;工…

【C++11】右值引用、移动构造、移动赋值、完美转发 的原理介绍

文章目录 一、概念1.1 左值1.2 左值引用1.3 什么是右值&#xff1f;1.4 什么是右值引用&#xff1f;对于参数左值还是右值的不同&#xff0c;是被重载支持的左值引用的使用场景 和 缺陷 二、移动语义2.1 移动拷贝构造2.2 移动赋值 三、右值引用 与 STL3.1 移动拷贝构造 和 赋值…

Web攻防03_MySQL注入_数据请求

文章目录 PHP-MYSQL-数据请求类型1、数字型(无符号干扰)2、字符型&#xff08;有符号干扰&#xff09;3、搜索型&#xff08;有多符号干扰&#xff09;4、框架型&#xff08;有各种符号干扰&#xff09; PHP-MYSQL-数据请求方法数据请求方法GET&#xff1a;POST&#xff1a;Coo…

运筹系列86:MIP问题的建模tips

1. Either-or constraint 添加辅助变量y。 比如 Either 3 x 1 2 x 2 ≤ 18 3x_12x_2 \le 18 3x1​2x2​≤18 or x 1 4 x 2 ≤ 16 x_14x_2 \le 16 x1​4x2​≤16 可以用 3 x 1 2 x 2 ≤ 18 M y 3x_12x_2 \le 18My 3x1​2x2​≤18My x 1 4 x 2 ≤ 16 M ( 1 − y ) x_1…

【vue】el-carousel实现视频自动播放与自动切换到下一个视频功能:

文章目录 一、原因:二、实现代码:三、遇到的问题&#xff1a;【1】问题&#xff1a;el-carousel页面的视频不更新【2】问题&#xff1a;多按几次左按钮&#xff0c;其中跳过没有播放的视频没有销毁&#xff0c;造成再次自动播放时会跳页 一、原因: 由于后端无法实现将多条视频拼…

2023年:哪些Trello的替代品值得关注?

你还记得你的第一块Trello板吗&#xff1f;它可能帮助你记录了大学申请、培训目标&#xff0c;甚至是圣诞礼物这些待办事项。对于我们中的许多人来说&#xff0c;Trello 是我们尝试的第一个工作管理工具。无论是跟踪高中作业&#xff0c;组织家庭任务&#xff0c;还是可视化工作…

瑞芯微RKNN开发·yolov5

官方预训练模型转换 下载yolov5-v6.0分支源码解压到本地&#xff0c;并配置基础运行环境。下载官方预训练模型 yolov5n.ptyolov5s.ptyolov5m.pt… 进入yolov5-6.0目录下&#xff0c;新建文件夹weights&#xff0c;并将步骤2中下载的权重文件放进去。修改models/yolo.py文件 …

【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

文章目录 一、public 公有继承 - 示例分析1、类型兼容性原则2、类型兼容性原则应用场景 二、类型兼容性原则 - 示例分析1、父类指针 指向 子类对象2、使用 子类对象 为 父类对象 进行初始化3、完整代码示例 一、public 公有继承 - 示例分析 1、类型兼容性原则 类型兼容性原则 :…

测试开发之性能篇 —— 性能测试设计

很多朋友接触性能测试是从工具开始的&#xff0c;比如流行的JMeter、Loadrunner等。熟悉一个测试工具&#xff0c;有助于对性能测试的过程、方法和机制有个直观的理解。 我们知道&#xff0c;无论是什么类型的测试&#xff0c;其目标不外乎两个&#xff0c;一是为了证明系统满…

直播带货前途渺茫了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 种种迹象表明电商行业和直播带货将受到冲击。直播带货前途渺茫了&#xff0c;相信很快就有政策出来了&#xff0c;针对电商这块的&#xff0c;支持实体、支持取消直播带货。 (1)目前&#xff0c;…

C++对多继承的理解

学到C时我们知道了继承但是一般都是使用单继承为主&#xff0c;单继承就是一个子类只能继承一个父类而多继承是指一个子类可以同时继承多个父类。 菱形继承 菱形继承是多继承中的一个特殊情况。当一个子类同时继承两个具有共同父类的类时&#xff0c;就会出现菱形继承问题。但…

2 spring 识别自定义实现BeanFactoryPostProcessor 的接口

如果自定义实现了BeanFactoryPostProcessor接口&#xff0c;那么想让spring识别到的话&#xff0c;有两种方式&#xff1a; 1 定义在spring的配置文件中&#xff0c;让spring自动识别 2 调用具体的addBeanFactoryPostProcessor方法 方法1 的代码实现 定义实现BeanFactoryPo…

淘宝拍立淘接口,按图搜索商品接口,图片识别接口,图片上传搜索接口,图片搜索API接口,以图搜货接口

淘宝拍立淘图片搜索接口可以通过上传或输入图片链接的方式&#xff0c;调用淘宝的图片搜索引擎&#xff0c;返回与该图片相关的所有淘宝商品。 使用该接口需要先申请淘宝开放平台的App Key和App Secret&#xff0c;获取相应的API访问权限。在调用接口时&#xff0c;需要传入商…

YOLOv5算法改进(12)— 如何去更换主干网络(1)(包括代码+添加步骤+网络结构图)

前言:Hello大家好,我是小哥谈。YOLOv5采用的主干网络是CSPDarknet53,它是Darknet53的改进版本,采用了Cross Stage Partial连接(CSP)结构,可以提高模型的效率和准确率。在学术上,为了提升YOLOv5算法模型的准确率或者鲁棒性等,已经有很多改进方案问世。更换主干网络作为…

[C++]:2初识C++(auto) + 类和对象上:

[TOC](初识C(auto) 类和对象上) 一.初始C 1.auto关键字&#xff1a;(C11) 1.作为一个变量的类型给这个类型初始化&#xff0c;auto自动识别初始化这个变量值的类型&#xff0c;为auto类型的这个变量开辟一个合适的空间。 补充&#xff1a; 1.typeid(变量名).name—>可以打…

快速入门:Spring Cache

目录 一:Spring Cache简介 二:Spring Cache常用注解 2.1:EnableCaching 2.2: Cacheable 2.3:CachePut 2.4:CacheEvict 三:Spring Cache案例 3.1:先在pom.xml中引入两个依赖 3.2:案例 3.2.1:构建数据库表 3.2.2:构建User类 3.2.3:构建Controller mapper层代码 3.…