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

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();
        }

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwBack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值