用tp6写的简单的eml的登录和curd

项目地址: 企业管理eml: 这是一个简单的eml (gitee.com)

1.登录和主页显示

1.1 登录功能逻辑图

1.2 控制器
 app/controller/index.php
php think make:validate LoginValidate
<?php
namespace app\controller;

use app\BaseController;
use app\model\User;
use app\validate\LoginValidate;
use app\validate\UserValidate;
use liliuwei\think\Jump;
use think\facade\Log;
use think\facade\Request;
use think\facade\Session;
use think\facade\View;

class Index extends BaseController
{
    use Jump;
    protected $user;
    public function __construct(\think\App $app){
        parent::__construct($app);
        $this->user = new User();
    }
    public function index(){
        return View::fetch("login");
    }
    
    public function login(){
        if (Request::isPost()) {
            $data = Request::post();
            $loginValidate = new LoginValidate();
            if($loginValidate->check($data)){
                 $user = $this->user->login($data["username"]);
                 if ($user) {
                    if($data["password"]== $user["password"]){
                        Session::set("role", $user["roleid"]);

                        $this->success("登录成功",url("list"));
                    }else{
                        $this->error("密码错误","login");
                    }
                 }else{
                     $this->error("此账户不存在","login");
                 }
            }else{
                return json(['code'=>0,'message'=>$loginValidate->getError()]);
            }
        }
        return View::fetch();
    }

    public function list(){
        $user = $this->user->getUsers();
        
        $page = $user->render();
        $roleid = Session::get("role");
        View::assign([
            "user"=>$user,
            "page"=>$page,
            "roleid"=>$roleid,
        ]);
        return view::fetch();
    }

    public function add(){
        if(Request::isPost()){
            $data = Request::post();
            $userValidate = new UserValidate();
            if($userValidate->sceneAdd()->check($data)){

                if ($this->user->addUser($data)) {
                    $this->success("添加成功","list");
                }else{
                     $this->error("添加失败","list");
                }
            }else{
                return json(['code'=>0,'message'=>$userValidate->getError()]);
            }
        }
        return View::fetch();
    }

    public function edit($id){
        $id=Request::param("id");
        $row= $this->user->findById($id);
        View::assign(["row"=>$row]);
        return View::fetch();
    }

     /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        if(Request::isPost()){
            $data = Request::post();
             $data["updated_at"]=time();
            $userValidate=new UserValidate();
            if ($userValidate->check($data)){
            if ($this->user->updateUser($data)){
            $this->success("用户修改成功",url("list"));
            }else{
            $this->error("用户修改失败",url("list"));
            }
            }else{
                return $userValidate->getError();
            }
        }
    }

    public function delete($id){
        $user = $this->user->deleteUser($id);
        if($user){
            $this->success("删除成功","list");
        }else{
            $this->error("删除失败","list");
        }
        return View::fetch();
    }

}
1.3 模型
<?php

namespace app\model;

use think\facade\Log;
use think\facade\View;
use think\Model;

/**
 * @mixin \think\Model
 */
class User extends Model
{
    //
    
    
        public function login($username)
        {
         return self::where('username',$username)->find();
        }

          public function findById($id){
            return self::find($id);
        }
        public function getUsers()
        {
            return self::paginate(5);
        }

        public function addUser($data){
              $data["created_at"]=time();
            return self::save($data);
        }

        public function updateUser($data)
        {
            $user=self::find($data['id']);
            return $user->save($data);
        }

        public function deleteUser($id){
            $user=self::find($id);
            return $user->delete();
        }
        
}
1.4 验证器

登录

<?php
declare (strict_types = 1);

namespace app\validate;

use think\Validate;

class LoginValidate extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'username'=>'require|max:25',
        'password'=>'require'
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
    'username.require' => '用户名不能为空',
    'username.max' => '名称不能大于25',
    'password.require' => '密码不能为空',
    ];
}

用户

<?php
declare (strict_types = 1);

namespace app\validate;

use think\Validate;

class UserValidate extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        "username"=>"require|alphaNum",
        "password"=>"require",
    ];

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        "username.require"=>"账号不能为空",
         "username.alphaNum"=>"账号只能为字母和数字",
          "password.require"=>"密码不能为空",
    ];

    public function sceneAdd(){
        return $this->only(["username","name","password","phone","tel","email"])
        ->append("name","require")
        ->append("phone","mobile")
        ->append("tel","mobile")
        ->append("email","email");
    }
}
1.5 提交数据
view/index/login.html 页面中 form 表单的 action 写上请求路径 action="{:url('index/login')}"
view/index/login.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>eml通讯录管理系统经典版</title>
<link rel='stylesheet' href='__STATIC__/css/login.css' type='text/css' />
</head>
<body>
<div id="login">
<h1><a href="http://bbs.emlsoft.com" target="_blank" title="">eml企业通讯录管理系统
</a></h1>
<form accept-charset="utf-8" action="{:url('index/login')}" method="post">
<p>
<label>帐号:<!--{// $hello}--></label>
<input class="input" name="username" size="20" type="text" />
</p>
<p>
<label>密码:</label>
<input class="input" name="password" size="20" type="password" />
</p>
<p class="submit">
<input class="button-primary" name="commit" type="submit" value="登录" />
1.5 数据验证
1.5.1 安装验证器
1.5.2 自定义验证器
 validate/LoginValidate.php
<input class="button-primary" name="commit" type="button" value="注册"
onclick="javascript:window.location.href='?action=user&do=reg' "/>
</p>
</form>
</div>
<div align="center">&nbsp;&nbsp; Powered by <a href="http://bbs.emlsoft.com/"
target="_blank">emlSoft</a> <!--{// $cfg.version}--> 2013-2019 Some rights
reserved</div>
</body>
</html>

2. 注意事项

安装跳转扩展 : composer require liliuwei/thinkphp - jump ;
日期格式 {$row.created_at|date="Y/m/d H:i:s"}
请求路径 action="{:url('index/login')}
数据库文件 contacts_general.sql
.env配置:
APP_DEBUG = true

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = eml
USERNAME = root
PASSWORD = root
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

  视图调用js/css文件配置:

//文件位置 config/view
 'tpl_replace_string'  =>  [

    '__STATIC__'=>'/static',

    '__JS__' => '/static/javascript',

]

nginx配置:

        if (!-f $request_filename) {
               rewrite  ^(.*)$  /index.php?s=/$1  last;
        }


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA设置全局配置

1、 IDEA设置全局配置 在IDEA中&#xff0c;选择 File -> Close Project 关闭项目。然后选择Customize -> All settings 进行全局配置&#xff0c;即所有项目公共的配置。 配置文件编码 配置控制台编码 配置maven 配置文件模板 配置文件模板作者和时间信息如下&#xff…

德勤:《亚太地区半导体行业展望》

2024年2月22日&#xff0c;德勤联合全球半导体联盟&#xff08;GSA&#xff09;对亚洲半导体产业链相关企业展开调研&#xff0c;邀请数位亚太地区主要半导体企业领导人&#xff0c;共同探讨半导体企业在当前环境下应如何通过数字技术曲线的领先优势保持业务竞争力和盈利能力&a…

“我的海外代购,卖起了香灰手串”

【潮汐商业评论/文】 “这个琉璃手串&#xff0c;去年在雍和宫请的&#xff0c;招财的&#xff1b;这个朱砂挂件&#xff0c;当时直播说可以补八字缺火&#xff0c;果断下单的&#xff1b;这个博主讲星座很准&#xff1b;这篇帖子八字说得很详细&#xff1b;我前两天买了‘财神…

qt5-入门-标签页部件QTabWidget-1

参考&#xff1a; C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt5.12 目录 效果实现Qt Designer操作代码addStretch()解释 效果 首页有三个按钮和最近文件列表。 拖动窗口&#xff0c;按钮和文件列表仍然处…

CentOS7安装mysql-5.7.44单机和主从复制

官网下载地址&#xff1a; https://downloads.mysql.com/archives/community/ 1、单机安装 安装依赖 yum -y install libaio 解压安装 tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gzmv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysqlcd /usr/local/mysql…

【Spring 篇】走进Java NIO的奇妙世界:解锁高效IO操作的魔法

欢迎来到Java NIO的神奇之旅&#xff01;在这个充满活力的世界里&#xff0c;我们将一起揭示Java NIO&#xff08;New I/O&#xff09;的奥秘&#xff0c;探索其在高效IO操作中的神奇魔法。无需担心&#xff0c;即使你是Java的小白&#xff0c;也能轻松领略这个强大而灵活的IO框…

【pycharm】作为Array查看出现数据无法显示问题(已解决)

【pycharm】作为Array查看出现数据无法显示问题&#xff08;已解决&#xff09; 当我们在调试代码的时候&#xff0c;需要对某个变量进行查看&#xff0c;就如同在matlab中&#xff0c;我们可以直接在工作区对某个变量进行双击查看矩阵变量的具体数值 在这里我遇到一个问题&am…

关于javascript数字精度丢失的解决办法

分析原因 众所周知&#xff0c;在JavaScript中计算两个十进制数的和&#xff0c;有时候会出现令人惊讶的结果&#xff0c;主要原因是计算机将数据存储为二进制所引起的&#xff0c;所以这并不是javascript存在的缺陷&#xff0c;而在其他语言中也有类似的问题。 例如下面的例子…

Java小项目--满汉楼

Java小项目–满汉楼 项目需求 项目实现 1.实现对工具包的编写 先创建libs包完成对jar包的拷贝和添加入库 德鲁伊工具包 package com.wantian.mhl.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.FileInputStream…

Java基础--集合

集合 1.可以动态的保存任意多个对象&#xff0c;使用比较方便。 2.提供了一系列方便的操作对象的方法&#xff1a;add&#xff0c;remove&#xff0c;set&#xff0c;get等。 3.使用集合添加&#xff0c;删除新元素的示意代码&#xff0c;简介明了。 集合主要是两种&#xff0…

c语言扫雷改进版

目录 文章目录 主体 整体架构流程 技术名词解释 技术细节 测试情况 文章目录 概要整体架构流程技术名词解释技术细节测试情况 主体 主体包括菜单&#xff0c;游戏规则简绍&#xff0c;选择进行与否 int main() {int input;srand((unsigned int)time(NULL));do{ menu()…

谷歌地图TMS地图服务地址收集2024,测试可用

对于普通的开发者或者GIS从业者来说&#xff0c;免费的底图影像服务&#xff0c;太重要了。之前写过一篇谷歌地图的TMS地址收集的博文&#xff0c;由于谷歌网站关闭已经不能用。最近又发现了谷歌在国内开放了其他地址&#xff0c;在这里给大家分享一下。 https://gac-geo.googl…

springboot Thymeleaf模版引擎使用

1.引入依赖 <!--thymeleaf视图引擎--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> html中要声明约束&#xff0c;这样就可以使用themelraf视…

EMC Unity存储系统(包含VNXe)常用检查命令

DELL EMC的Unity存储系统&#xff0c;包括VNXe存储系统的OS已经完全和Clariion 的VNX不同了&#xff0c;近期遇到很多关于EMC unity存储系统故障的一些初步检查需求&#xff0c;下面是一些对于DELL EMC Unity存储系统的最常用的底层检查命令&#xff0c;可以对系统故障有个初步…

小程序商城如何接入和设置支付宝支付功能?

众所周知&#xff0c;移动支付已成为电商平台不可或缺的核心组件。为了提升用户体验并拓宽支付渠道&#xff0c;许多小程序商城系统纷纷引入了支付宝作为支付选项。那么&#xff0c;如何在小程序商城系统中成功接入和设置支付宝支付功能呢&#xff1f;这似乎是大家当前所面临的…

电子台账:账页数据溯源

目录 1 前言 2 打开数据溯源面板 3 溯源面板操作 1 前言 账页中让人眼花缭乱的大堆数据来自哪里&#xff1f;从企业数据源表格中自动抓取数据后&#xff0c;如果感觉数据不对&#xff0c;就需要进行核对、排错&#xff0c;怎样确定程序到底抓取的哪些单元格&#xff1f;取数…

Visual Studio 2022 出现:E1696无法打开 源 文件 “stdafx.h“;E0020未定义标识符 “_TCHAR“错误解决办法

今天在用自己电脑上的visual studio2022写并行计算实验报告时出现了这种错误&#xff0c;但我在机房电脑vs2010版本运行时没有任何问题&#xff0c;于是我在网上找了解决办法&#xff0c;现总结如下。 1.报错E1696无法打开 源 文件 "stdafx.h"&#xff0c;解决办法&a…

思维线索(Thread of Thought)-ThoT梳理混乱的语境

Thread of Thought Unraveling Chaotic Contexts 大型语言模型&#xff08;LLMs&#xff09;在自然语言处理领域开启了一个变革的时代&#xff0c;在文本理解和生成任务上表现出色。然而&#xff0c;当面对混乱的上下文环境&#xff08;例如&#xff0c;干扰项而不是长的无关上…

【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手

"SpringMVC"框架的简单创建与使用&#xff0c;快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&#xff1…

NVIDIA NCCL 源码学习(十三)- IB SHARP

背景 之前我们看到了基于ring和tree的两种allreduce算法&#xff0c;对于ring allreduce&#xff0c;一块数据在reduce scatter阶段需要经过所有的rank&#xff0c;allgather阶段又需要经过所有rank&#xff1b;对于tree allreduce&#xff0c;一块数据数据在reduce阶段要上行…