第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問在C中的表單數(shù)據(jù)在做完驗證后,如何傳遞給M層?有沒有好的解決方案?

請問在C中的表單數(shù)據(jù)在做完驗證后,如何傳遞給M層?有沒有好的解決方案?

PHP
拉莫斯之舞 2023-04-08 14:10:21
目前采用的是在Action中就把數(shù)據(jù)組裝成對應(yīng)的領(lǐng)域?qū)ο螅缓笸ㄟ^傳參的方式給制定的model~但是這樣做的話無疑把復(fù)雜的組裝過程交給了action的開發(fā)人員,這樣做會使得分層之間的職責(zé)劃分不夠合理,c和m層的人員都需要去了解領(lǐng)域?qū)ο蟮南嚓P(guān)接口。另外,model做完業(yè)務(wù)后的反饋數(shù)據(jù)如何回傳給action,尤其是多條數(shù)據(jù)返回,簡單的返回一個數(shù)組總覺得不夠優(yōu)雅,導(dǎo)致兩層之間的依賴過強(qiáng),不利于開發(fā)~
查看完整描述

2 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

關(guān)于數(shù)據(jù)結(jié)構(gòu),我的建議是,PHP代碼,拒絕數(shù)據(jù)對象。PHP最牛的,或者說最具有優(yōu)勢的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,所以傳遞數(shù)組不是不優(yōu)雅,這就是PHP的最佳實踐。
關(guān)于MVC之間的傳遞,我的建議是各層只把自己了解的數(shù)據(jù)以數(shù)組形式傳遞給其它層,接收數(shù)據(jù)的時候,做一次可用性驗證,拼裝成自己需要的數(shù)據(jù)結(jié)構(gòu)(最好也是數(shù)組)。

查看完整回答
反對 回復(fù) 2023-04-11
?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊

你的問題我也糾結(jié)過,目前我的解決辦法是這樣的:

/**
 * 創(chuàng)建新主題
 * @return string
 */public function actionNew()
{    if (Yii::$app->user->isGuest) {
        Yii::$app->user->loginRequired();
    }

    $form = new TopicForm();
    $form->author_id = Yii::$app->user->getId();
    $form->ip_address = Yii::$app->request->getUserIP();    if ($form->load($_POST) && $form->validate())
    {
        Services::getTopics()->create($form->getAttributes(), $form->content);
        $this->redirect(['/forum']);
    }    return $this->render('new', [        'model' => $form
    ]);
}

這段代碼是基于Yii2的,作用是在社區(qū)發(fā)一個新貼。

我的做法是用model(實際上我寫的名字是form,因為Yii2的form其實就是model)來收集提交上來的表單數(shù)據(jù),然后進(jìn)行驗證

$form = new TopicForm();
$form->author_id = Yii::$app->user->getId();
$form->ip_address = Yii::$app->request->getUserIP();

驗證通過后會使用相應(yīng)的服務(wù)將數(shù)據(jù)寫入數(shù)據(jù)

Services::getTopics()->create($form->getAttributes(), $form->content);

已知這樣做的好處是form基本可以重用,因為他不涉及其他東西,只是驗證數(shù)據(jù)合法性,所以不管是web、api,我都能直接使用他。

Services同理,不管別的,拿到數(shù)據(jù)就往數(shù)據(jù)庫寫(當(dāng)然復(fù)雜的還要在內(nèi)部處理,這里不說),同樣也能復(fù)用。

不過這種做法有個問題,就是你需要同時了解 Form 跟 Services 的功能,而Yii2默認(rèn)的做法是你不需要了解他們,一個典型的Yii2從表單到數(shù)據(jù)庫的代碼是這樣的:

public function actionCreate(){    $model = new User();    if ($model->load($_POST) && $model->save()) {        $this->redirect(['index']);
    }    return $this->render('create', ['model' => $model]);
}

看出來了嗎?人家壓根就不分層,你根本不用關(guān)心其他的,把數(shù)據(jù)load進(jìn)去就好了,至于怎么驗證,怎么存儲,都是黑箱在操作,開發(fā)速度大大提升,但是代碼耦合略高,比如web注冊用戶跟app上注冊用戶的情景可能是不同的(當(dāng)然,Yii2提供了scenario機(jī)制,一定程度上可以避免這個問題)


查看完整回答
反對 回復(fù) 2023-04-11
  • 2 回答
  • 0 關(guān)注
  • 131 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號