tpframe之添加数据

为了保证数据的原子性,建议最好一个逻辑(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层,因为我没有用到数据自动完成或数据自动修改功能,以后我会用一个实例来补充它的用法

这就完成了数据的基本添加操作了

爆料早知道: