tpframe之添加数据

2018-03-23 15:18 更新

为了保证数据的原子性,建议最好一个逻辑(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);为什么这样就能添加了呢?当然我里面是封装好了的,但是,添加的时候传递过来的参数是有要求的,<span style="color:#F00">必须跟数据库里面的字段对应</span>,例如这里的$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层,因为我没有用到数据自动完成或数据自动修改功能,以后我会用一个实例来补充它的用法

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

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号