# 自动完成
> 该部分知识请参考thinkphp官方教程:http://www.kancloud.cn/manual/thinkphp5/138668
在实际开发过程中,我们往往需要自动记录一些时间节点。比如在这里,我们需要记录每个用户的创建时间。
> timestamp 时间戳的出现,用于解决日期比较、各时区时间不同等的时间问题,它是指相对于1970年1月1日0点0分0秒的秒数。
解决方法:我们可以在form表单中增加一个字段,或是在action中,手动写一个字段。当然了,我们还可以使用时间戳的自动完成功能。
在thinkphp中,我们将创建时间字段规定为create_time,更新时间规定为update_time,虽然我们也可以自定义,但除非该字段与其它我们想定义的字段产生冲突,否则我们不会那样做。
## 方法一:form表单
`文件路径为:index/view/Teacher/add.html`
~~~
<label>邮箱:</label>
<input type="email" name="email" />
<input type="hidden" name="create_time" value="{:time()}" />
<button type="submit">保存</button>
~~~
~~~
<?php
namespace app\index\controller;
...
class TeacherController extends Controller
{
...
public function insert()
{
// 接收传入数据
$postData = $this->request->post();
// 实例化Teacher空对象
$Teacher = new Teacher();
// 为对象赋值
$Teacher->name = $postData['name'];
$Teacher->username = $postData['username'];
$Teacher->sex = $postData['sex'];
$Teacher->email = $postData['email'];
$Teacher->create_time = $postData['create_time'];
// 新增对象至数据表
$Teacher->save();
// 反馈结果
return '新增成功。新增ID为:' . $Teacher->id;
}
...
}
~~~
> time()请参考: http://php.net/manual/zh/function.time.php
测试结果如下图所示:
**注意:一定要先刷新新增页面,新增信息后,点击保存进行测试,因为后退并没有改变HTML代码。**
![](https://box.kancloud.cn/2016-06-14_575fa8bed72e8.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bef012a.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bf14391.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bf3073a.png)
如果出了问题,那么我们需要从数据流上找问题。
1. form表单是否进行了正确的传值?
2. insert action是否正确的接收到了值?
3. 传入的字段,是否与数据表字段相对应?
## 方法二:控制器中action
我们首先将V层文件add.html中的form表单进行恢复,去除create_time字段<input type="hidden" name="create_time" value="{:time()}" />。
然后如下改写C层:
~~~
...
namespace app\index\controller;
...
// 为对象赋值
$Teacher->name = $postData['name'];
$Teacher->username = $postData['username'];
$Teacher->sex = $postData['sex'];
$Teacher->email = $postData['email'];
$Teacher->create_time = time();
...
~~~
测试结果如下:
**再提示一遍,修改V层后,需要刷新当前页面。**
![](https://box.kancloud.cn/2016-06-14_575fa8bf4e1f1.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bf63bdd.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bf7b01a.png)
## 方法三 使用自动时间戳
我们恢复C层,**去除** 刚刚加入的那行代码`$Teacher->create_time = time();`。
然后application根目录下的找到database.php,修改auto_timestamp项为true
~~~
// 是否自动写入时间戳字段
'auto_timestamp' => true,
~~~
然后再测试,查看测试结果:
**重要的事情说三遍,先刷新!**
![](https://box.kancloud.cn/2016-06-14_575fa8bfcd99d.png)
![](https://box.kancloud.cn/2016-06-14_575fa8bfe19a4.png)
![](https://box.kancloud.cn/2016-06-14_575fa8c0036d5.png)
![](https://box.kancloud.cn/e3f14c0ef754f411d7ebfc166b873969_600x182.png)
这样做有什么好处呢?
其实很明显了,我们现在只是处理一个form,一个insert。如果不使用自动加入时间戳的功能的话,我们每写一个这样的小功能,都需要加一行加入时间的代码。而使用这个功能后,我们只需要配置好database.php就可以了。
~~~
git checkout -f step3.3.4
~~~
执行上述命令后,上述示例代码信息如下:
![](https://box.kancloud.cn/025e7b6abfa643444d0e3093ef28a4f9_921x440.png)
- 序言
- 第一章 准备知识
- 第一节:XAMPP
- 第二节:NAVICAT
- 第三节:GIT
- 第二章 HelloWorld
- 第一节:下载THINPHP5.0
- 第二节:启动xampp
- 第三节:hello thinkphp
- 第四节:Hello world
- 第五节:MCA
- 第六节:单引号与双引号
- 第三章 教师管理
- 第一节:新建数据库
- 第二节:CURD之R 读数据
- 3.2.1 时序图
- 3.2.2 连接数据库
- 3.2.3 直接读取数据
- 3.2.4 间接读取数据
- 3.2.5 使用V层显示数据
- 3.2.6 引入bootstrap
- 3.2.7 加入bootstrap样式
- 第三节:CURD之 C 增加数据
- 3.3.1 插入数据
- 3.3.2 表单传值
- 3.3.3 存储表单数据
- 3.3.4 自动时间戳
- 3.3.5 增加验证
- 第四节:CURD之 D 删除数据
- 3.4.1 什么是关键字
- 3.4.2 删除数据
- 3.4.3 定制删除链接
- 3.4.4 完善删除
- 第五节:CURD之 U 更新数据
- 3.5.1 读取数据
- 3.5.2 展示数据
- 3.5.3 修改数据
- 3.5.4 传递数据
- 3.5.5 接收数据
- 3.5.6 更新数据 方法一
- 3.5.7 更新数据 方法二
- 第六节:衔接各个action & 重构代码
- 3.6.1 index action
- 3.6.2 add action
- 3.6.3 insert action
- 3.6.4 delete action
- 3.6.5 edit action
- 3.6.6 update action
- 第七节:分页
- 3.7.1 调用内置分页
- 3.7.2 select与paginate(选学)
- 3.7.3 分页原理(选学)
- 3.7.4 调用page(选学)
- 第八节:模糊查询
- 3.8.1 增加查询
- 3.8.2 完善查询
- 第四章 登录与注销
- 第一节:cookie 与 session
- 第二节:静态方法
- 第三节:规划URL跳转
- 第四节:登录
- 4.4.1 登录流程
- 4.4.2 index action
- 4.4.3 login action
- 4.4.4 引入M层
- 4.4.5 异常Exception
- 第五节:注销
- 第六节:验证
- 4.6.1 action增加验证
- 4.6.2 使用构造函数验证
- 4.6.3 使用继承验证
- 第五章 E-R图与数据字典
- 第一节:第一张E-R图
- 第二节:实体间的关系
- 第三节:开发规范
- 第六章 班级管理
- 第一节:建立数据表
- 第二节:数据列表index
- 第三节:增加数据add
- 第四节:编辑数据edit
- 第五节:删除数据delete
- 第七章 学生管理
- 第一节:建立数据表
- 第二节:数据列表
- 7.2.1 显示性别
- 7.2.2 显示创建时间
- 7.2.3 显示班级名称
- 7.2.4 显示辅导员姓名
- 第三节:编辑数据
- 第四节:魔法函数
- 第五节:源码分析
- 第八章 课程管理
- 第一节:建立数据表
- 第二节:新增课程
- 第三节:编辑课程
- 8.3.1 edit
- 8.3.2 update
- 第九章 代码重构
- 第一节:add 与 edit
- 第二节:insert 与 update
- 第三节:模板继承
- 9.3.1 index.html
- 9.3.2 edit.html
- 9.3.3 小结
- 第十章 UML图
- 第一节:E-R图回顾
- 第二节:UML图
- 第十一章 菜单与路由
- 第一节:添加菜单
- 第二节:虚拟主机
- 第三节:定制路由
- 第十二章 开发调试
- 第一节:开启trace
- 第二节:查看日志
- 第十三章:总结