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

news2024/9/24 23:21:37
项目地址: 企业管理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;
        }


 

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

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

相关文章

探索海外市场舆情:云手机助力企业赢得全球竞争

在全球化的趋势下&#xff0c;越来越多的企业将目光投向海外市场&#xff0c;迎接着无尽的商机与挑战。然而&#xff0c;随之而来的是境外市场舆情的复杂变化&#xff0c;对企业的声誉和发展带来了潜在风险。如何准确、及时地掌握境外市场的舆情动向&#xff0c;成为了企业必须…

异常 --java学习笔记

异常 异常就是代表程序出现的问题 当一个方法出现问题&#xff0c;这个方法内部就会把这个问题的信息封装成一个异常对象&#xff0c;然后把这个异常对象抛给jvm虚拟机&#xff0c;jvm收到之后会先把出问题的程序先停下来&#xff0c;然后再把这个异常对象打印出来&#xff0c…

libVLC 元数据

libVLC是一个开源的多媒体框架&#xff0c;主要用于处理和播放各种类型的媒体文件&#xff0c;如视频、音频等。 媒体元数据&#xff08;Metadata&#xff09;&#xff1a;包括媒体文件的基本信息&#xff0c;如标题、艺术家、专辑、持续时间、分辨率、比特率、编码格式等。 …

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

Power BI ----SVG(圆环图)

圆环图助力矩阵图 定义度量值放置视觉对象SVG是什么鬼,在现在的Web世界中越来越凸显这一标准的优势。关于SVG,我们只需要知道一点就好 ---- SVG 意为可缩放矢量图形(Scalable Vector Graphics)。它是使用 XML 格式定义的图像。 由此我们就可以知道SVG是可以通过文本来定义图…

web前端框架设计第三课-基础特性

web前端框架设计第三课-基础特性 一.预习笔记 1.Vue实例 每个Vue.js的应用都需要通过构造函数创建一个Vue的实例 语法格式&#xff1a;var 实例名new Vue({}) 特性1–挂载元素&#xff1a;Vue的实例需要具体的存放位置&#xff0c;而挂载元素el就是提供者 特性2–数据&…

数字乡村标准化白皮书 - 2024年版:数字乡村内涵、发展现状、标准化现状、标准需求

党的二十大报告指出“全面推进乡村振兴。全面建设社会主义现代化国家&#xff0c;最艰巨最繁重的任务仍然在农村。坚持农业农村优先发展&#xff0c;坚持城乡融合发展&#xff0c;畅通城乡要素流动。加快建设农业强国&#xff0c;扎实推动乡村产业、人才、文化、生态、组织振兴…

Day01-数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)

文章目录 Day01-数据类型和运算符学习目标1. 数据库介绍1.1 数据库的发展历史1.2 数据库分类1.2.1 关系型(SQL)数据库1.2.2 非关系型(NoSQL)数据库1.2.3 数据库排名 2. MySQL服务器的安装2.1 MySQL介绍2.2 下载2.3 安装2.4 启动服务器2.5 卸载 3. MySQL客户端3.1 使用命令行客户…

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 &#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;Docker容器化部署系列 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 一、前言 一大早就有一…

Java设计模式 | 工厂方法模式

工厂方法模式 针对简单工厂模式案例中的缺点&#xff0c;使用工厂方法模式就可以完美的解决&#xff0c;完全遵循开闭原则。简单工厂模式只有一个工厂类&#xff0c;负责创建所有产品&#xff0c;如果要添加新的产品&#xff0c;就需要修改工厂类的代码。而工厂方法模式引入了…

通过人工智能驱动的交互提升客户体验

用AI创造无限可能&#xff1a;打造极致客户体验的秘诀 在当今竞争激烈的市场中&#xff0c;客户体验至关重要。 企业正在迅速采用人工智能驱动的交互来彻底改变与客户的互动。 人工智能技术不仅简化了运营&#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…

8.2K star!史上最强Web应用防火墙

&#x1f6a9; 0x01 介绍 长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall)&#xff0c;一款敢打出口号 “不让黑客越雷池一步” 的 WAF&#xff0c;我愿称之为史上最强的一款Web应用防火墙&#xff0c;足够简单、足够好用、足够强的免费且开源…

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

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

如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、Vue项目打包到docker镜像1.编译打包前端…

记一次由于buff/cache导致服务器内存爆满的问题

目录 前言 复现 登录服务器查看占用内存进程排行 先了解一下什么是buff/cache&#xff1f; 尝试释放buffer/cache /proc/sys/vm/drop_caches dirty_ratio dirty_background_ratio dirty_writeback_centisecs dirty_expire_centisecs drop_caches page-cluster swap…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

智能模型新篇章:RAG + Fine-Tuning 混合增强策略

一、前言 在之前的探讨中&#xff0c;我们已经分别深入了解了RAG&#xff08;检索增强生成&#xff09;和 Fine-tuning&#xff08;微调&#xff09;这两种优化大型语言模型的方法&#xff0c;探讨了它们在不同业务场景下的适用性、优势及局限。然而&#xff0c;我们很少讨论将…

深度学习——微积分基础

目录 1、导数和微分 1.1 定义函数&#xff1a; 1.2 趋近过程&#xff1a; 1.3 绘图表示&#xff1a; 2、偏导数 3、梯度 4、链式法则 5、学习心得 在2500年前&#xff0c;古希腊人把一个多边形分成三角形&#xff0c;并把它们的面积相加&#xff0c;才找到计算多边形面积…