thinkphp笔记-创建数据2

FormController.class.php 
<?php
namespace Home\Controller;
use Think\Controller;
class FormController extends Controller{
public function insert(){
$Form = D('Form');
if($Form->create()) {
$result = $Form->add();
// if($result) {
// $this->success('数据添加成功!');
// }else{
// $this->error('数据添加错误!');
// }
// }else{
// $this->error($Form->getError());
echo "ok!",$result;

}else{
echo "no!",$Form->getError(),"hh--$result";
}
}
}
 
Form/add.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>

<body>
<div class="myform">
<form method="post" action="insert">
标题:<input name="title" type="text" /><br/>
内容:<textarea name="content" rows="5" cols="45"></textarea><br/>
<input type="submit" value="提交" />
</form>
</div>
</body>
</html>
 
FormModel.class.php(D函数需要有对应的模型类)
<?php
namespace Home\Model;
use Think\Model;
class FormModel extends Model {
//
定义自动验证
protected $_validate = array(
array('title','require','标题必须'),
);
//
定义自动完成
protected $_auto = array(
array('create_time','time',1,'function'),
);
}
 
 
 
==
创建数据
大多数情况下,CURD的Create操作通常会通过表单来提交数据,首先,我们在Home模块的View/Form
目录下面创建一个add.html 模板文件,内容为:
<FORM method="post" action="__URL__/insert">
标题:<INPUT type="text" name="title"><br/>
内容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/>
<INPUT type="submit" value="提交">
</FORM>
然后,我们还需要在Home模块的Controller目录下面创建一个FormController.class.php文件,暂时只需
要定义FormController类,不需要添加任何操作方法,代码如下:
<?php
namespace Home\Controller;
use Think\Controller;
class FormController extends Controller{
}
接下来,访问
http://localhost/app/index.php/home/Form/add
就可以看到表单页面了,我们并没有在控制器里面定义add操作方法,但是很显然,访问是正常的。因为
ThinkPHP3.2.3快速入门
本文档使用 看云 构建 - 13 -
ThinkPHP在没有找到对应操作方法的情况下,会检查是否存在对应的模板文件,由于我们有对应的add模
板文件,所以控制器就直接渲染该模板文件输出了。所以说对于没有任何实际逻辑的操作方法,我们只需
要直接定义对应的模板文件就行了。
我们可以看到,在表单中定义了提交地址是到Form控制器的insert操作,为了处理表单提交数据,我们需
要在FormController类中添加insert操作方法,如下:
<?php
namespace Home\Controller;
use Think\Controller;
class FormController extends Controller{
public function insert(){
$Form = D('Form');
if($Form->create()) {
$result = $Form->add();
if($result) {
$this->success('数据添加成功!');
}else{
$this->error('数据添加错误!');
}
}else{
$this->error($Form->getError());
}
}
}
如果你的主键是自增类型的话,add方法的返回值就是该主键的值。不是自增主键的话,返回值表示插入
数据的个数。如果返回false则表示写入出错。
模型
为了方便测试,我们首先在数据库中创建一个think_form表:
CREATE TABLE IF NOT EXISTS `think_form` (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`create_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
我们在insert操作方法中用了D函数,和M函数不同,D函数需要有对应的模型类,下面我们就来创建模型
类。
模型类的定义规范是:
模型名+Model.class.php (模型名的定义采用驼峰法并且首字母大写)
ThinkPHP3.2.3快速入门
本文档使用 看云 构建 - 14 -
我们在Home模块的Model目录下面创建FormModel.class.php文件,添加代码如下:
<?php
namespace Home\Model;
use Think\Model;
class FormModel extends Model {
//
定义自动验证
protected $_validate = array(
array('title','require','标题必须'),
);
//
定义自动完成
protected $_auto = array(
array('create_time','time',1,'function'),
);
}
主要是用于表单的自动验证和自动完成,具体用法我们会用另外的篇幅单独讲述,这里暂时先略过。我们
只要了解的是,如果使用D函数实例化模型类,一般需要对应一个数据模型类,而且create方法会自动把表
单提交的数据进行自动验证和自动完成(如果有定义的话),如果自动验证失败,就可以通过模型的
getError方法获取验证提示信息,如果验证通过,就表示数据对象已经成功创建,但目前只是保存在内存
中,直到我们调用add方法写入数据到数据库。这样就完成了一个完整的Create操作,所以可以看到
ThinkPHP在创建数据的过程中使用了两步:
第一步,create方法创建数据对象
第二步,使用add方法把当前的数据对象写入数据库
当然,你完全可以跨过第一步,直接进行第二步,但是这样的预处理有几个优势:
1. 无论表单有多复杂,create方法都可以用一行代码轻松创建数据对象;
2. 在写入数据之前,可以对数据进行验证和补充;
其实create方法还有很多的功能操作,目的只有一个,确保写入数据库的数据安全和有效。
我们来验证下表单提交的效果,当我们不输入标题就直接提交表单的话,系统会给出标题必须这样的提示
信息。
ThinkPHP3.2.3快速入门
本文档使用 看云 构建 - 15 -
当我们顺利提交表单后,会看到写入数据表的数据中的 create_time 字段已经有值了,这就是通过模型的
自动完成写入的。
如果你的数据完全是内部操作写入而不是通过表单的话(也就是说可以充分信任数据的安全),那么可以
直接使用add方法,如:
$Form = D('Form');
$data['title'] = 'ThinkPHP';
$data['content'] = '表单内容';
$Form->add($data);
也可以支持对象方式操作:
$Form = D('Form');
$Form->title = 'ThinkPHP';
$Form->content = '表单内容';
$Form->add();
对象方式操作的时候,add方法无需传入数据,会自动识别当前的数据对象赋值。
posted @ 2015-11-29 16:24  afraliuyd  阅读(210)  评论(0)    收藏  举报