在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/PHP/ php模型和控制器之間交互

php模型和控制器之間交互

學(xué)習(xí)使用的是Tp5.1

在看別人代碼的時(shí)候想很多關(guān)于數(shù)據(jù)庫(kù)的操作之間寫(xiě)到控制器里面了;

public function save()
{
    $data = input('post');
    $validate = $this->validate($data,"app\\common\\TestValidate");
    
    $result = (new UserModel)->save($data);
    
    if($result){
        return $this->success('操作成功');
    }else{
        return $this->success('操作失敗');
    }
}

但是有人說(shuō)這樣就沒(méi)必要用模型,可以將寫(xiě)入數(shù)據(jù)的方法寫(xiě)到model里面

但是寫(xiě)在model中在控制器調(diào)用的時(shí)候如何判斷是否寫(xiě)入成功呢?
還有就是將數(shù)據(jù)驗(yàn)證是應(yīng)該寫(xiě)在控制器還是模型??

比如用戶注冊(cè) 前端提交->控制器接收請(qǐng)求->模型
這之中的數(shù)據(jù)驗(yàn)證寫(xiě)到控制器還是模型

如果寫(xiě)到控制器沒(méi)什么疑問(wèn),但是如果寫(xiě)到模型

模型中驗(yàn)證失敗返回false 咋樣返回錯(cuò)誤信息呢? 難道說(shuō)模型中返回一個(gè)數(shù)組['status'=>0,'msg'=>'手機(jī)號(hào)碼已經(jīng)被注冊(cè)'];

之后由控制器接收模型返回的該數(shù)組 判斷返回的status嗎?

還有順便問(wèn)問(wèn)服務(wù)層和邏輯層該如何運(yùn)用??

問(wèn)題有點(diǎn)多,希望大家告知下,多謝!

回答
編輯回答
悶騷型

1.MVC了解一下!邏輯控制寫(xiě)在控制器,數(shù)據(jù)處理寫(xiě)在model里。
2.控制器調(diào)用model中的方法,model的方法執(zhí)行成功或者失敗返回布爾值,然后控制器根據(jù)布爾值來(lái)判斷執(zhí)行的結(jié)果。
3.答案1

2017年8月5日 19:13
編輯回答
毀憶

MVC里最重要的就是M,也就是model,控制器只是做中轉(zhuǎn),所有和數(shù)據(jù)或者數(shù)據(jù)庫(kù)打交道的地方一般放到model里去做,有些框架會(huì)把model層再細(xì)分為service層和logic層

2018年5月1日 15:57
編輯回答
做不到

你看到的應(yīng)該是很多普遍存在的一種形式,或者說(shuō)是使用某種框架然后偏離了我們的初衷!
首先對(duì)于編程設(shè)計(jì)思想MVC來(lái)說(shuō),我們已經(jīng)將前后端分離了,那么我們也繼續(xù)在后端將控制器和模型處理也分離,那么我們的數(shù)據(jù)處理確實(shí)應(yīng)該寫(xiě)在model里面,控制器只是負(fù)責(zé)調(diào)度

2018年8月3日 03:31
編輯回答
我甘愿

如果完全遵循MVC的話,數(shù)據(jù)處理肯定放model啊,然后controller負(fù)責(zé)調(diào)用model 然后根據(jù)model返回的數(shù)據(jù)來(lái)進(jìn)行邏輯處理,TP中model也是可以validate的。

服務(wù)層就是model的一個(gè)分層service,一起分出來(lái)的還有l(wèi)ogic,他們就是對(duì)model的一個(gè)分離,service負(fù)責(zé)提供給controller的接口,而logic幫助controller處理邏輯。
比如驗(yàn)證 可以model只做增刪改查,logic調(diào)用model做判斷并且處理邏輯 再返回給service。
就是為了降低方法之間的耦合

2018年1月12日 12:21
編輯回答
過(guò)客

我覺(jué)得樓主問(wèn)的重點(diǎn)應(yīng)該是這一行:

模型中驗(yàn)證失敗返回false 咋樣返回錯(cuò)誤信息呢? 難道說(shuō)模型中返回一個(gè)數(shù)組['status'=>0,'msg'=>'手機(jī)號(hào)碼已經(jīng)被注冊(cè)'];

如果把處理數(shù)據(jù)的代碼都放到模型中,有時(shí)通過(guò)后要返回?cái)?shù)據(jù),不通過(guò)需要返回錯(cuò)誤提示信息,在控制器中要作出判斷確實(shí)有些麻煩。

統(tǒng)一返回的數(shù)據(jù)格式為['status'=>0/1,'info"=>msg/data] 確實(shí)是一種方法。
但寫(xiě)起來(lái)總覺(jué)得有些麻煩。

當(dāng)然,返回的 msg 一般是 string,而返回的 data 一般是 array,所以,通過(guò)判斷返回的數(shù)據(jù)類型也是可以考慮的。(但有時(shí)又會(huì)有特例)

所以,還是直接寫(xiě)到控制器中比較方便。

如果數(shù)據(jù)處理的邏輯比較復(fù)雜,而且可能在其它控制器中會(huì)用到,那么,寫(xiě)到模型中去。
如果邏輯比較簡(jiǎn)單,其它控制器中不可能用到,寫(xiě)到控制器中比較方便。

你要追求嚴(yán)謹(jǐn),就要犧牲“便利性”!
然而,PHP 是一門(mén)很追求“便利性”的語(yǔ)言。

2017年3月31日 15:57
編輯回答
不二心

按道理來(lái)說(shuō)是應(yīng)該寫(xiě)在model中,但是現(xiàn)在數(shù)據(jù)庫(kù)查詢各種AR封裝方法就是方便你直接寫(xiě)的,所以簡(jiǎn)單的直接在controller中:

(new UserModel)->save($data);

難道還需要特意在model中再封裝一下?

public function saveUser(){
    self::save();
}

也許有人覺(jué)得統(tǒng)一封裝后方便修改,但現(xiàn)在IDE中批量修改也很方便,而且基本不會(huì)出現(xiàn)這種情況,個(gè)人是感覺(jué)沒(méi)必要,簡(jiǎn)單的數(shù)據(jù)庫(kù)交互可以直接在controller中寫(xiě),復(fù)雜的而且需要復(fù)用的交互才需要放在model中。

2018年4月21日 09:56