最近正在学习thinkphp,同时博客同步记录学习笔记,但是内容大多都是[1] 提供的文档,所以,强烈建议直接阅读该文档,此文仅作为本人学习记录之用
*在此之前,假设数据库中已经有一张表 think_form 了,具体内容请看[1]
CURD指的是数据的基本操作:
通过表单提交数据是很常见的一种提交数据方式。
在 thinkphp 中,是以控制器的形式来执行基本的业务的。
在[1] 中的例子中,以 Form
为控制器例子。
首先在 Home/Controller/
下创建类:FormContrller.class.php
<?php namespace Home\Controller; use Think\Controller; class FormController extends Controller{ }
然后在 Home/View/From
下添加文件(没有就创建目录):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>
此时,就可以通过以下链接访问表单页面了:
localhost/xiaojian/html/thinkphp/index.php/home/form/add
(url 不分大小写)
看到这里,相信你都可以通过这个案例,举一反三了,总结出一些规律了。
View 文件夹下以控制器名字命名文件夹,改文件夹下的html 文件是对应控制器的视图文件
当通过PATHINFO 模式访问时,首先服务器会寻找控制器下 add 的操作名,没有则直接渲染同时视图显示。
如果在Form 中添加add 的函数,那么表单就不会出现了,而是执行add 的函数的输出结果。
然后,给Form 类添加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.html
中,有:
<FORM method="post" action="__URL__/insert">
由此可以猜想__URL__
其实就是这一段:
localhost/xiaojian/html/thinkphp/index.php/home/form
(简直牛逼)
后面就是直接的添加数据了。
*在[1] 中这里叫做模型
在 FormController类中的insert 函数用到了一个 D 函数,这个D 函数呢向我刚才那么直接就add 进数据库,不安全且危险。这里thinkphp 提供了数据验证的方法。
D 函数需要对应 model 类的。所以在/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'), ); } ?>
此时如果直接在 add 中提交数据,那么就会得到提示:
:(
标题必须
具体这个验证怎么用,待学。
数据还支持内部提交:
(要保证数据的绝对安全)
$Form = D('Form');
$data['title'] = 'ThinkPHP';
$data['content'] = '表单内容';
$Form->add($data);
或者:
$Form = D('Form');
$Form->title = 'ThinkPHP';
$Form->content = '表单内容';
$Form->add();
读取数据使用M函数,通过find 函数实现。
在FormController类中定义 read 方法:
public function read($id=0){
$Form = M('Form');
// 读取数据
$data = $Form->find($id);
if($data) {
$this->assign('data',$data);// 模板变量赋值
}else{
$this->error('数据错误');
}
$this->display();
}
find 返回值如下:
array(
'id' => 5,
'title' => '测试标题',
'content' => '测试内容',
'status' => 1,
)
渲染模板文件如下:
<table>
<tr>
<td>id:</td>
<td>{$data.id}</td>
</tr>
<tr>
<td>标题:</td>
<td>{$data.title}</td>
</tr>
<tr>
<td>内容:</td>
<td>{$data.content}</td>
</tr>
</table>
如果你只需要查询某个字段的值,还可以使用getField方法,例如:
$Form = M("Form");
// 获取标题
$title = $Form->where('id=3')->getField('title');
首先,可以建一个视图,把数据库的内容读出来,然后通过表单提交。
在这里也是使用M 方法。
那么在FormController 类中添加两个方法,一个edit, 一个update。
public function edit($id=0){
$Form = M('Form');
$this->assign('vo',$Form->find($id));
$this->display();
}
public function update(){
$Form = D('Form');
if($Form->create()) {
$result = $Form->save();
if($result) {
$this->success('操作成功!');
}else{
$this->error('写入错误!');
}
}else{
$this->error($Form->getError());
}
然后就可以通过链接访问:
localhost/app/index.php/home/Form/edit/id/1
与上面的内容大同小异,主要是 save 函数的用法。
同样的,update 也提供了直接内部其他的方法,可以直接去阅读文档。
删除数据使用delete 的方法:
$User = M("User"); // 实例化User对象
$User->where('id=5')->delete(); // 删除id为5的用户数据
$User->delete('1,2,5'); // 删除主键为1,2和5的用户数据
$User->where('status=0')->delete(); // 删除所有状态为0的用户数据
返回值是是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。
[参考资料]
[1] 快速入门