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管理员
修改密码(修改自己的面)