跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

tpframe-curd操作之添加数据

未结贴
2 6111
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视频教程 86918
父元素flex之后,子元素高度自适应问题 10929
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 9921
thinkphp5隐藏默认模块的一些问题 9488
api接口文档插件easydoc的基本用法,快速搞定接口文档 9444
omnicore rpc api中文手册【usdt】 9168
PHP如何判断字符串是否为json格式 9084
教你如果处理高并发数据不同步的问题php篇 9025
关于thinkphp5.0.x getshell漏洞的说明 8844
使用宝塔linux面板创建FTP无法连接的解决办法(阿里云或腾讯云) 8726
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 71
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: