扫一扫浏览

tpframe-curd操作之添加数据

未结贴
2 219
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视频教程 548
TPFrame框架简介 430
TPFrame框架robot模块重磅来袭,内附2.1版本 385
TPFrame安装说明 360
TPFrame目录结构 343
TPFrame 2.1 beta版本正式发布,全部插件式开发到来 329
thinkphp5自动完成操作,两次运行的详解 302
slide模块发布 302
tpframe基类介绍 293
tpframe之添加数据 282
月度热议HOT COMMENTS
tpframe 后续版本你希望有的功能是什么(分享贴) 8
关于tpframe的一点话题 6
为了框架的良性发展,tpframe招募成员了 4
thinkphp5自动完成操作,两次运行的详解 2
tpframe-curd操作之添加数据 2
tpframe能带给你的,让你快速搞定各服务端(api,pc,mobile,wechat)代码的框架 2
slide模块发布 2
透析thinkphp5升级版开发框架tpframe 2
微信公众号支付一些容易遇坑的地方 1
用了那么久的SVN,你都知道了些什么 1
爆料早知道:文档中心文档已更新我有好想法