扫一扫浏览

tpframe-curd操作之添加数据

未结贴
2 914
yaosean未认证 2017-12-21 15:55:53
收藏

为了保证数据的原子性,建议最好一个逻辑(logic层)操作对应一张表

如果你还不清楚整个网站的应用目录结构,再去看看再来进行后续的操作。

再次强调一下目录分层结构:

controller:控制器层,起控制转发功能,不管逻辑

logic:逻辑层,最要处理逻辑,数据操作等

service:服务层,可不用,当一个操作涉及到多个Logic操作并涉及到事务等操作的时候,这层就显得很重要了

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)它就会自动定位到相应logic层下面对应的类了,这里它就定位到logic层下的User类,并调用它的saveUser方法

创建逻辑层

在你的模块logic里面创建User.php

<?php
namespace app\frontend\logic;
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];
        }
		$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层,因为我没有用到数据自动完成或数据自动修改功能,以后我会用一个实例来补充它的用法

这就完成了数据的添加操作了,有什么问题留言....

  • 黑色々星期三 黑色々星期三 36
    2017-12-25 17:10:08

    感觉层数好复杂哦,这样做有啥好处呀?

    回复
  • 太当回事 太当回事 24
    2018-01-14 00:51:59

    当你的系统开发越来越大的时候,好处就很明显了,代码之间解耦合低。

    回复
最近热帖 HOT TOPIC
【全套视频】thinkphp5视频教程 1264
thinkphp5隐藏默认模块的一些问题 1151
TPFrame框架robot模块重磅来袭,内附2.1版本 1078
教你如果处理高并发数据不同步的问题php篇 1077
tpframe安装教程 1067
tpframe新建主题 1015
slide模块发布 1006
tpframe应用目录结构 1001
thinkphp5自动完成操作,两次运行的详解 982
TPFrame 2.1 beta版本正式发布,全部插件式开发到来 939
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 12
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
新增的管理员没有权限操作CMS模块。 3
api接口文档插件easydoc的基本用法,快速搞定接口文档 3
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
透析thinkphp5升级版开发框架tpframe 2
爆料早知道:又拍云存储插件上线我有好想法