• 0xx_PHPTP框架03


    ThinkPHP框架-03

    今日目标(每日任务)

    1、能够使用模型方法修改数据

    2、能够使用模型方法删除数据

    3、能够使用trait及实现软删除功能

    4、能够使用cookie和session

    5、能够使用验证码组件

    十九、修改操作

    (见手册--模型--更新) (CURD: create update read delete)

    1、更新一条数据

    使用示例

    先查询再更新 和 直接更新 (save方法)

    2、批量更新数据

    以上用法通常比较少用,更多的批量更新,是使用where条件,一次更新多条数据的指定字段值。

    (多条数据的同一个字段,改成同一个值)

    appadminmodelGoods::where(‘id’, ‘GT’, 40)->update([‘goods_number’ => 100])

    3、静态方法更新(推荐)

    示例: 直接调用update方法,第三个参数 true 表示过滤非数据表字段

    4、自动识别

    5、课堂代码示例

    二十、案例:后台商品修改功能

    表单展示 Goods控制器 edit方法(整合模板)

    表单提交 Goods控制器update方法

    思路:

    ①在表单展示 控制器方法中,查询原始的数据

    ②在表单页面,展示原始数据

    ③确认表单完整性,完善name属性和提交地址等信息,主键id隐藏域

    ④在表单提交的控制器方法中,接收数据

    ⑤参数检测(表单验证)

    ⑥将数据修改到数据表

    ⑦页面跳转。

    1、页面展示

    ①修改Goods控制器edit方法,查询原始商品数据

    ②修改view/goods/edit.html ,将原始数据展示到input输入框的value上

    2、表单提交

    ③确认表单完整性,完善提交地址和name属性值等。

    ④修改view/goods/edit.html ,添加隐藏域,保存当前商品记录的主键id值

    ⑤修改Goods控制器update方法,接收表单提交并保存数据

    添加数据验证

    3、ueditor富文本编辑器整合

    ①引入js文件

    ②定义标签,id属性、name属性

    ③使用js代码实例化编辑器

    廿一、删除操作

    (见手册--模型--删除、手册--模型--软删除)

    1、删除操作

    ①先查询,再调用模型的delete方法删除

    $user = User::get(1);
    $user ->delete();
    

    ②先调用where方法,再调用Query类的delete方法删除

    User::where(‘id’, 1)->delete();
    

    ③静态调用destroy方法删除(推荐)

    User::destroy(1);
    User::destroy(‘1,2,3’);
    User::destroy([1,2,3]);
    User::destroy([‘status’=>1]);
    

    delete方法使用示例

    课堂示例

    原笔记示例

    a.先查询再删除

    b.使用where条件,调用Query类的delete方法删除

    c.静态调用destroy方法进行删除

    删除效果:将指定的数据从数据表直接删除,返回值都是受影响的记录条数

    2、trait

    (见手册--架构--Traits引入)

    1)初识trait

    trait A{
    	public function getName()
    	{
    		return 'This is trait';
    	}
    }
    

    trait的定义,和类非常相似,只需要将关键字class换成trait即可。

    2)trait的使用

    定义trait之后,在一个类中进行使用。

    class B{
    	use A;
    }
    $b = new B();
    echo $b->getName(); //This is trait
    

    3)trait、类与继承

    trait A{
        public function getName()
        {
            return 'A-getName';
        }
        
        public function getAge()
        {
            return 'A-getAge';
        }
    }
    
    class C{
        public function getName()
        {
            return 'C-getName';
        }
    
        public function getAge()
        {
            return 'C-getAge';
        }
    
        public function getSex()
        {
            return 'C-getSex';
        }
    }
    
    class B extends C{
    
        //使用trait
        use A;
    
        public function getAge()
        {
            return 'B-getAge';
        }
    
        public function getSex()
    
        {
            return 'B-getSex';
        }
    }
    $b = new B();
    echo $b->getSex();//B-getSex
    echo $b->getName();//A-getName
    echo $b->getAge();//B-getAge
    

    注:有同名方法,当前类方法 会覆盖 trait的方法,trait的方法会覆盖继承类的方法。

    更多使用,见php手册

    TP中的trait:

    父类控制器Controller中使用了Jump这个trait,提供了页面跳转相关方法。

    模型的SoftDelete这个trait,需要在自定义模型中,手动使用,提供的是软删除相关功能。

    3、软删除

    物理(硬)删除:真删除, 从数据表直接删除记录。

    逻辑(软)删除:假删除(本质是修改操作),只是让数据在页面不显示,数据表中仍然保留。

    原理:在数据表添加一个字段控制数据在页面的展示。点击删除操作时,修改对应字段的值。

    软删除:(见手册--模型--软删除)

    SoftDelete这个trait的位置:

    软删除的使用示例:

    在模型中进行设置

    廿二、案例完成后台的商品删除功能

    1、设置模型的软删除

    (前面已经设置过)

    2、软删除功能实现

    3、增删改查操作小结

    见admin/Curd控制器。 核心代码(15-20行)

    4、id参数检测

    廿三、登录登出权限控制

    1、封装密码加密函数

    注意:后台管理员表tpshop_manager中 初始的管理员密码

    密码要自己加密一个初始密码,更新到数据表

    使用自定义的密码加密函数:

    随意找一个控制器的方法,使用加密函数对一个自定义的初始密码进行加密输出。

    效果:

    将此加密后的密码,复制,修改到tpshop_manager表的passwod字段。

    2、模板中使用请求参数

    (见手册--模板--请求参数)

    示例:{$Request.url} 获取当前页面的url地址

    3、TP中的cookie和session

    (见手册--杂项--cookie,手册--杂项--session)

    TP框架提供了thinkCookie类和thinkSession类分别操作cookie和session.

    也可以使用助手函数cookie()和session()。

    session函数使用语法:

    session函数基本操作

    session('name', 'thinkphp');  //设置
    session('name');	//读取
    session('name', null);	//删除单个session
    session(null);	//删除所有session
    

    session函数 点语法

    //数组用法 点语法
    session('user', ['username'=>'hua', 'age'=>30]);
    //使用点语法 直接操作数组中的一个键值对
    session('user.email', 'hua@qq.com');
    dump(session('user'));
    //直接取数组中的一个键值对
    dump(session('user.email'));
    //删除数组中的一个值
    session('user.email', null);
    dump(session('user.email'));
    

    cookie函数使用语法:

    使用示例:

    4、完成后台的登录功能

    需要创建Manager模型:

    命令行方式: php think make:model admin/Manager

    思路:

    ①表单展示

    ②表单中的name属性值、提交地址

    ③提交的控制器方法中,接收数据

    ④查询用户表 验证用户名和密码

    ⑤用户名和密码正确,设置登录标识到session 跳转到后台首页

    ⑥用户名或密码错误,报错,返回登录页面

    路径:Login控制器login方法

    ①确认form表单完整性,完善name属性和提交地址

    ②修改Login控制器login方法,接收表单提交并处理

    判断请求方式(一个方法,处理两个业务逻辑:表单展示、表单提交)

    表单提交post请求

    登录成功,一定要设置登录标识到session。

    注:where方法的使用 手册--数据库--查询构造器--高级查询

    5、完成后台的登出功能

    ①在后台的Login控制器新增logout方法

    ②修改退出入口的链接地址

    在view/layout.html修改对应链接地址。

    ③页面入口

    6、后台页面权限控制(越权访问--FQ)

    ①在Admin模块Controller目录,新增一层Base控制器

    session(‘?name’) 表示 判断session中是否设置name,返回值是true和false;

    ②所有后台其他的控制器都需要继承Base控制器(Login控制器例外

    比如Index控制器、Goods控制器等

    注:相同命名空间下的类,互相访问时,可以不用携带命名空间。

    廿四、验证码技术

    1、使用验证码的步骤

    ①生成验证码图片,展示在页面上

    ②点击图片刷新验证码功能

    ③提交表单后验证码的校验

    2、TP中的验证码显示

    (见手册--杂项--验证码)

    验证码包的位置:

    ①修改配置applicationconfig.php

    ②修改view/login/login.html 验证码图片img标签src属性

    ③点击刷新验证码图片

    修改view/login/login.html,验证码图片img标签,绑定onclick事件,给src地址加随机数

    3、验证码的校验

    修改Login控制器login方法:表单提交后,先进行验证码校验,再查询数据表

    总结:

    1、修改操作以及后台商品修改功能(save方法、saveAll方法、静态update方法

    2、删除操作(delete方法、destroy方法)与软删除功能、trait

    3、cookie和session操作(助手函数)

    4、登录模块功能(登录、退出、登录检测)

    5、验证码(captcha_src() captcha_img() captcha_check())

    作业:

    1、商品修改、商品删除(软删除)、登录、退出、登录检测、验证码1./2、

    2、管理员模块增删改查

    注意点:

    管理员列表: 不显示密码

    管理员添加:用户名、密码(加密)、邮箱、昵称等

    管理员修改:用户名不能修改;可以改 密码(重置别人的密码)、邮箱、昵称等

    管理员删除:不能删除admin管理员

    修改密码(修改自己的面)

  • 相关阅读:
    webrtc 手机端视频旋转
    gstreamer 命令行一些demo
    git一些命令记录
    libnice的问题记录
    webrtc ice 协商一些记录
    linux 挂在windows目录
    leetcode Permutation Sequence
    gstreamer 接收rtsp存储为h264
    uva 10285
    AndroidStudio VS Eclipse快捷键
  • 原文地址:https://www.cnblogs.com/xeclass/p/12657553.html
Copyright © 2020-2023  润新知