为了保证数据的原子性,建议最好一个逻辑(logic层)操作对应一张表
如果你还不清楚整个网站的应用目录结构,再去看看再来进行后续的操作。
再次强调一下目录分层结构:
controller:控制器层,起控制转发功能,不管逻辑
logic:逻辑层,主要处理逻辑、数据库操作等
service:服务层,数据验证、事务处理、数据后期处理等操作
model:模型层,数据处理层(已经封装好,直接继承于BaseModel),自动完成,自动修改等操作
validate:数据验证层,数据进行curd操作的时候最好对数据进行严格验证
view:视图层
一、创建数据库
要插入数据所先得有自己的数据库,如果你已经有了就不用创建了,例如我这里有一个用户表
| 主键 | 用户名 | 密码 |
| id | username | password |
主键设置为自动递增
二、创建控制层
在你的模块controller里面创建User.php
<?php
namespace app\frontend\controller;
use \tpfcore\Core;
class User extends FrontendBase
{
public function add()
{
IS_POST && $this->jump(Core::loadModel($this->name)->saveUser($this->param));
return $this->fetch("add");
}
}
控制器里面相当的干净,这里用到Core这个核心类,Core::loadModel($this->name)它就会自动定位到相应service层下面对应的类了,这里它就定位到service层下的User类,并调用它的saveUser方法
控制器说明:
前端控制器都要继承FrontendBase基类,访基本又继承ControllerBase类
打开FrontendBase你可以看到里面什么都没有,为什么要继承这个类,而不直接继承ControllerBase类?每因为个模块在执行之前可能要进行一些不同的操作
三、创建服务器
在你的service模块里面创建User.php
<?php
// +----------------------------------------------------------------------
// | Author: yaoyihong <510974211@qq.com>
// +----------------------------------------------------------------------
namespace app\frontend\service;
use app\common\service\ServiceBase;
use \tpfcore\Core;
/**
* 基础服务
*/
class User extends FrontendBase
{
public function saveUser($data){
// 在进行数据操作前进行数据验证
$validate=\think\Loader::validate($this->name);
$validate_result = $validate->scene('add')->check($data);
if (!$validate_result) {
return [RESULT_ERROR, $validate->getError(), null];
}
return Core::loadModel($this->name)->saveObject($data);
}
}
这里面进行的操作便是数据验证,逻辑调用,或后期数据处理等操作
四、创建逻辑层
在你的公共模块logic里面创建User.php
<?php
namespace app\frontend\logic;
use \tpfcore\Core;
class User extends FrontendBase
{
public function saveUser($data){
$result=self::saveObject($data);
if($result){
return [RESULT_SUCCESS,"操作成功"];
}
return [RESULT_ERROR,"操作失败"];
}
}
这里为什么要创建在公共模块?目的就是想让很多模块能共用逻辑,我们以后要扩展功能 的时候,少写重复的逻辑。
这里的添加就用了一句话self::saveObject($data);为什么这样就能添加了呢?当然我里面是封装好了的,但是,添加的时候传递过来的参数是有要求的,必须跟数据库里面的字段对应,例如这里的$data格式一定是下面这样 的
array(
'username'=>"用户名",
'password'=>"密码的值"
)
五、数据验证层
在你的模块validate里面创建User.php
<?php
namespace app\frontend\validate;
class User extends FrontendBase
{
// 验证规则
protected $rule = [
'username' => 'require',
'password' => 'require',
];
// 验证提示
protected $message = [
'username.require' => '用户名必须',
'password.require' => '密码必须',
];
// 应用场景
protected $scene = [
'add' => ['username','password']
];
}
我这里就只能数据进行了简单的验证,在逻辑层里面进行简单的调用,指定验证场景,就会自动进行这里面的数据验证了,具体更详细的验证规则请点击https://www.kancloud.cn/manual/thinkphp5/129320进行查看
六、视图层
视图层我就简单的写一下,在theme/frontend/default新建立一个User文件夹,然后创建一个add.html文件,内容如下
<!DOCTYPE html>
<html>
<head>
<title>添加用户</title>
</head>
<body>
<form method="post" action="{:url('User/add')}">
<input type="text" name="username"/><br/>
<input type="password" name="password"/><br/>
<input type="submit" value="操作注册"/>
</form>
</body>
</html>
打开浏览器访问:http://你的域名/user/add测试一下效果
这里我没有用到Model层,因为我没有用到数据自动完成或数据自动修改功能,以后我会用一个实例来补充它的用法
这就完成了数据的基本添加操作了