CURD(创建[Create]、更新[Updata]、读取[Read]、删除[Delete]),定义了用于处理数据的基本原子操作。
CURD在具体的应用中并非一定使用create、updata、read、delete字样的方法,但是他们完成的功能是一致的。
例如:
ThinkPHP就是使用add、save、select和delete方法表示模型的CURD操作。
一、创建数据
CURD的Create操作通常会通过表单来提交数据,首先,我们在项目的Tpl/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>
在项目的Action目录下面创建一个FormAction.class.php文件,暂时只需要定义FormAction类,不需要添加任何操作方法,代码如下:
Class FormAction extends Action {}
接下来,访问:
注意:
我们并没有在控制器里面定义add操作方法,但是很显然,访问是正常的。
原因:
因为ThinkPHP在没有找到对应操作方法的情况下,会检查是否存在对应的模板文件,由于我们有对应的add模板文件,所以控制器就直接渲染该模板文件输出了。
所以说对于没有任何实际逻辑的操作方法,我们只需要直接定义对应的模板文件就行了。
表单处理:
Class FormAction extends Action {
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;
注意:D函数和M函数不同,需要有对应的模型类。
创建模型类:
模型名的定义规范:模型名+Model.class.php(模型名的定义采用驼峰法并且首字母大写)
我们在项目的Lib/Model目录下面创建FormModel.class.php文件,添加代码如下:
Class FormModel extends Model {
//定义自动验证
Protected $_validate = array(
Array(‘title’,’require’,’标题必须’),
);
//完成自动完成
Protected $_auto = array(
Array(‘create_time’,’time’,1,’function’),
);
}
主要用于表单的自动验证和自动完成。
如果使用D函数实例化模型类,一般需要对应一个数据模型类,而且create方法会自动把表单提交的数据进行自动验证和完成(如果有定义的话)。
如果验证成功,就表示数据对象已经成功创建,但目前只是保存在内存中,直到我们调用add方法写入数据到数据库。这样就完成了一个完整的Create操作,所以可以看到ThinkPHP在创建数据的过程中使用了两步:
第一步,create方法创建数据对象,
第二步,使用add方法把当前的数据对象写入数据库
当然可以完全跨越第一步,直接进行第二步,但是这样的预处理有几个优势:
1、无论表单有多复杂,create方法都可以用一行代码轻松创建数据对象,
2、在写入数据之前,可以对数据进行验证和补充;
目的:确保写入数据库的数据安全和有效。
效果:验证完毕不输入标题就直接提交表单的话,系统会给出标题必须这样的提示信息。
如果你的数据完全是内部操作写入而不是通过表单的话(也就是说可以充分信任数据的安全),那么可以直接使用add方法,如:
$Form = D(‘Form’);
$data[‘title’] = ‘ThinkPHP’;
$data[‘content’] = ‘表单内容’;
$Form->add($data);
也可以支持对象方式操作:
$Form = D(‘Form’);
$Form -> title = “ThinkPHP”;
$Form -> content = “表单内容”;
$Form -> add();
对象方式操作的时候,add方法无需传入数据,会自动识别当前的数据对象赋值。
三、读取数据
我们可以通过find方法获取一个单一数据,定义read操作方法如下:
Public function read($id=0){
$Form = M(‘Form’);
//读取数据
$data = $Form -> find($id);
If($data){
$this->data = $data;//模板变量赋值
}else{
$this->error(‘数据错误’);
}
$this->display();
}
read操作方法有一个参数$id,表示我们可以接受URL里面的id变量(