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方法无需传入数据,会自动识别当前的数据对象赋值。
相关文章
相关标签/搜索