资源控制器的创建
使用dos命令,生成资源控制器:
- 先找到项目目录(即网站目录)
- dos命令切换到当前目录,输入:php think make:controller app\index\controller\Users
- 注:最后一个是资源控制器的名称
编写资源路由(app\route.php)
- 注释原有代码
- 导入资源路由类:use think\Route;
- 写对应控制器的资源路由Route::resource('users','index/Users');
- 注:在User控制器下的方法对应的View界面,引入文件除了index()方法与static文件同级,其他方法相应的View界面引入文件时(即写相对路径时),都需要跳相应的级(例如:../ ../../ 否则会报错!模块不存在!)。
数据库增删改查(User.php,注意导入Db类 即use think\Db;)
查询
- 查询,对应着index()方法
- 先进行查询操作
$data = Db::query("select * from user");
3. 调用assign将结果集分配给数组
$this->assign("data", $data);
4. 加载页面
return view();
5. 对应app\index\controller目录下新建view文件夹,view目录下新建users文件夹, users目录下新建index.html,编写界面代码。
{volist name="data" id="value" }
<tr>
<td>{$value.id}</td>
<td>{$value.name}</td>
<td>{$value.pass}</td>
<td>{$value.age}</td>
<td><a href="/users/{$value.id}/edit">修改</a></td>
<td>
<form class="" action="/users/{$value.id}" method="post">
<input type="hidden" name="_method" value="delete">
<button>删除</button>
</form>
</td>
注:以上只是部分代码
关键点:是用volist传入$data数组,并用value进行标识,在表格中迭代输出。
插入
- 在app\index\controller\view\users\目录下新建create.html,编写界面代码。
<form class="" action="/users" method="post">
<!--表单中文本框的name属性一定要和数据库中的列名相对应 -->
<div class="form-group">
<label for="">User</label>
<input type="text" name="name" class="form-control" placeholder="请输入用户名">
</div>
<div class="form-group">
<label for="">Pass</label>
<input type="paaword" name="pass" class="form-control" placeholder="请输入密码">
</div>
<div class="form-group">
<label for="">Age</label>
<input type="number" name="age" class="form-control" placeholder="请输入年龄">
</div>
<div class="form-group">
<input type="submit" class="btn-success" name="" value="提交">
<input type="reset" class="btn-danger" name="" value="重置">
</div>
</form>
</table>
注意:每种标识对应的请求类型,相应的生成路由规则就不同(指form表单中的action值),且每种操作的请求类型不同,需要通过模拟相应的请求,即文中相应.html代码中的隐藏域。
2. 在对应的Users.php中的save()方法中编写代码。
//接收post请求过来的所有数据
$data = input("post.");
//执行数据库插入
$res = Db::execute("insert into user value(null, :name, :pass, :age)", $data);
if($data){
//跳转
$this->success("添加成功", '/users');
}
else{
$this->error("添加失败", '/user/create');
}
更新
- 先编写Users.php中的edit()方法,对index.html中传的id值进行查询。
//从数据库中查询比修改的数据
$data = DB::query("select * from user where id = ?", [$id]);
// dump($data);
//分配数据
$this->assign("data", $data[0]);
//加载页面
return view();
2. 在app\index\controller\view\users\目录下新建edit.html,编写界面代码。
<form class="" action="/users/{$data.id}" method="post">
<!--表单中文本框的name属性一定要和数据库中的列名相对应 -->
<div class="form-group">
<input type="hidden" name="_method" value="PUT">
<label for="">User</label>
<input type="text" name="name" value="{$data.name}" class="form-control" placeholder="请输入用户名">
</div>
<div class="form-group">
<label for="">Pass</label>
<input type="text" name="pass" value="{$data.pass}" class="form-control" placeholder="请输入密码">
</div>
<div class="form-group">
<label for="">Age</label>
<input type="text" name="age" value="{$data.age}" class="form-control" placeholder="请输入年龄">
</div>
<div class="form-group">
<input type="submit" class="btn-success" name="" value="提交">
<input type="submit" class="btn-danger" name="" value="重置">
</div>
</form>
注:此处的数据仍然是从edit()方法中的$data数组的第一个元素,且此处的form表单的action值为/users/{$data.id}(注:查表可以看到,这个是用的是update的路由规则,与更新相对应)
3. 在相应的Users.php控制器下update()方法中编写代码。
//接收数据
//接收除了_method之外的数据
$data = $request::instance()->except('_method');
// dump($data);
// 执行数据库更新操作
$db = Db::execute("update user set name=:name, pass=:pass, age=:age where id=:id", $data);
if($db){
$this->success("数据更新成功", '/users') ;
}else {
$this->error("数据更新失败");
}