為了保證數(shù)據(jù)的原子性,建議最好一個邏輯(logic層)操作對應(yīng)一張表
如果你還不清楚整個網(wǎng)站的應(yīng)用目錄結(jié)構(gòu),再去看看再來進(jìn)行后續(xù)的操作。
再次強(qiáng)調(diào)一下目錄分層結(jié)構(gòu):
controller:控制器層,起控制轉(zhuǎn)發(fā)功能,不管邏輯
logic:邏輯層,主要處理邏輯、數(shù)據(jù)庫操作等
service:服務(wù)層,數(shù)據(jù)驗證、事務(wù)處理、數(shù)據(jù)后期處理等操作
model:模型層,數(shù)據(jù)處理層(已經(jīng)封裝好,直接繼承于BaseModel),自動完成,自動修改等操作
validate:數(shù)據(jù)驗證層,數(shù)據(jù)進(jìn)行curd操作的時候最好對數(shù)據(jù)進(jìn)行嚴(yán)格驗證
view:視圖層
要插入數(shù)據(jù)所先得有自己的數(shù)據(jù)庫,如果你已經(jīng)有了就不用創(chuàng)建了,例如我這里有一個用戶表
| 主鍵 | 用戶名 | 密碼 | | id | username | password |
主鍵設(shè)置為自動遞增
在你的模塊controller里面創(chuàng)建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");
}
}
控制器里面相當(dāng)?shù)母蓛簦@里用到Core這個核心類,Core::loadModel($this->name)它就會自動定位到相應(yīng)service層下面對應(yīng)的類了,這里它就定位到service層下的User類,并調(diào)用它的saveUser方法
控制器說明:
前端控制器都要繼承FrontendBase基類,訪基本又繼承ControllerBase類
打開FrontendBase你可以看到里面什么都沒有,為什么要繼承這個類,而不直接繼承ControllerBase類?每因為個模塊在執(zhí)行之前可能要進(jìn)行一些不同的操作
在你的service模塊里面創(chuàng)建User.php
<?php // +---------------------------------------------------------------------- // | Author: yaoyihong <510974211@qq.com> // +---------------------------------------------------------------------- namespace app\frontend\service;
use app\common\service\ServiceBase;
use \tpfcore\Core;
/**
* 基礎(chǔ)服務(wù)
*/
class User extends FrontendBase
{
public function saveUser($data){
// 在進(jìn)行數(shù)據(jù)操作前進(jìn)行數(shù)據(jù)驗證
$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);
}
}
這里面進(jìn)行的操作便是數(shù)據(jù)驗證,邏輯調(diào)用,或后期數(shù)據(jù)處理等操作
在你的公共模塊logic里面創(chuàng)建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,"操作失敗"]; } }
這里為什么要創(chuàng)建在公共模塊?目的就是想讓很多模塊能共用邏輯,我們以后要擴(kuò)展功能 的時候,少寫重復(fù)的邏輯。
這里的添加就用了一句話self::saveObject($data);為什么這樣就能添加了呢?當(dāng)然我里面是封裝好了的,但是,添加的時候傳遞過來的參數(shù)是有要求的,<span style="color:#F00">必須跟數(shù)據(jù)庫里面的字段對應(yīng)</span>,例如這里的$data格式一定是下面這樣 的
array( 'username'=>"用戶名", 'password'=>"密碼的值" )
在你的模塊validate里面創(chuàng)建User.php
<?php namespace app\frontend\validate; class User extends FrontendBase { // 驗證規(guī)則 protected $rule = [ 'username' => 'require', 'password' => 'require', ];
// 驗證提示
protected $message = [
'username.require' => '用戶名必須',
'password.require' => '密碼必須',
];
// 應(yīng)用場景
protected $scene = [
'add' => ['username','password']
];
}
我這里就只能數(shù)據(jù)進(jìn)行了簡單的驗證,在邏輯層里面進(jìn)行簡單的調(diào)用,指定驗證場景,就會自動進(jìn)行這里面的數(shù)據(jù)驗證了,具體更詳細(xì)的驗證規(guī)則請點擊https://www.kancloud.cn/manual/thinkphp5/129320進(jìn)行查看
視圖層我就簡單的寫一下,在theme/frontend/default新建立一個User文件夾,然后創(chuàng)建一個add.html文件,內(nèi)容如下
<!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層,因為我沒有用到數(shù)據(jù)自動完成或數(shù)據(jù)自動修改功能,以后我會用一個實例來補(bǔ)充它的用法
這就完成了數(shù)據(jù)的基本添加操作了
更多建議: