摘要:而且現(xiàn)在的中,每個(gè)輸出變?yōu)榱朔祷?,就像上面的一樣,你現(xiàn)在可以完全返回一個(gè)字符串了,有沒(méi)有一絲絲的影子不過(guò),你在的中只需認(rèn)識(shí)這些新特性基本就足矣,因?yàn)橐恍└镜臇|西跟是一樣的撒,完全不用怕,我是說(shuō)如果你上手過(guò)的話。
這篇文章主要來(lái)看看在Yii2之中的MVC,當(dāng)然,最核心的思想還是跟Yii1.1一樣的,但是我今天是想來(lái)看看在Yii2里的MVC跟Yii1.1有什么不同,或者應(yīng)該直接說(shuō),Yii2的改進(jìn)在哪里,以至于使得官方敢向著最好的PHP框架目標(biāo)進(jìn)擊!
廢話就不多說(shuō)了,下面來(lái)看看分別M-V-C這三個(gè)部分:
模型(Model):Yii之中的Models都繼承與yiiaseModel,通常是用來(lái)存儲(chǔ)數(shù)據(jù)并對(duì)這些數(shù)據(jù)設(shè)置一些特定的驗(yàn)證規(guī)則(rules())。每一個(gè)Model Class其實(shí)很多時(shí)候都是跟一些更加核心的類(比如Active Record)配合著使用,而在Yii2中,Active Record的增強(qiáng)也讓我很驚喜,后續(xù)我打算在寫(xiě)一遍文章來(lái)專門(mén)介紹Yii2的Active Record。
在每一個(gè)Model當(dāng)中,attributes和attributes label其實(shí)跟Yii1.1差不多,但讓我特別值得拍手稱快的是在Yii2中,除了rules()函數(shù)之外,還有scenarios()函數(shù)來(lái)增強(qiáng)Yii2的Model驗(yàn)證,rules()函數(shù)具體擔(dān)當(dāng)為Model的每一個(gè)attributes進(jìn)行過(guò)濾驗(yàn)證,而scenarios()則可以根據(jù)不同的場(chǎng)景需要來(lái)聲明哪一個(gè)attributes是無(wú)需驗(yàn)證的(Which means safe here);我們來(lái)看下面的例子:
[4, 32]], ["first_name", "string", "max" => 128], ["password", "required","on" => "signup"], ]; } public function scenarios() { return [ "signup" => ["username", "password"], "update" => ["username", "first_name"], ]; } }
這個(gè)例子中的password field只分配給Model中的signup 場(chǎng)景(scenario),所以有關(guān)password的驗(yàn)證只在signup這個(gè)scenario起作用,個(gè)人覺(jué)得這個(gè)是Yii2的Model中一個(gè)很牛逼的升級(jí),因?yàn)檫@種機(jī)制的產(chǎn)生使得我們?cè)陂_(kāi)發(fā)的時(shí)候?qū)σ恍?b>attributes的驗(yàn)證和分配有了更靈活的掌控感,大大提高我們對(duì)表單可用性和場(chǎng)景化應(yīng)用的設(shè)計(jì)開(kāi)發(fā)。
多個(gè)attributes的分配也有一些細(xì)微的變化,我們之前在Yii1.1的時(shí)候,經(jīng)常會(huì)這樣:
if (isset($_POST["userModel"])) { $model->attributes = $_POST["userModel"]; }
而在Yii2中,你只需要這樣:
$model->load($_POST);
這里的關(guān)鍵就是load()函數(shù)會(huì)自動(dòng)檢查在$model->formName().定義的$_POST的索引
視圖(Views)在Yii2的Views中也有一些小小的變化,最明顯的變化莫過(guò)于render()函數(shù)了,現(xiàn)在它會(huì)返回一個(gè)值,而不是像Yii1.1的那樣輸出(output)值,比如:
public function actionIndex() { $models = Posts::find()->all(); echo $this->render("index", array("models" => $models)); }
看到了沒(méi),render的內(nèi)容現(xiàn)在可以直接用echo來(lái)輸出了,先不管這是怎么回事(更多細(xì)節(jié)我會(huì)在下面的Controller部分里講解)。還有一點(diǎn)就是,Yii2還有官方的擴(kuò)展(official extensions)來(lái)支持一些常見(jiàn)的模板引擎如:smarty,twig等。喜歡這些模版引擎的同學(xué),你們有福氣了。
在Views還有一個(gè)值得注意的地方就是$this變量,在Yii1.1中,$this可以說(shuō)就是鏈接Controller和Views的中介;而在Yii2中,$this代表的是yiiwebView組件,這使得我們可以在view當(dāng)中設(shè)置一些很有用的Views中的屬性比如:網(wǎng)頁(yè)的title,meta等,甚至是注冊(cè)js 腳本也是OK的,是不是有一種很直觀的感受,跟寫(xiě)原生的html一樣,我想要什么title就要什么,That is cool!
控制器(Controllers)首先直接來(lái)看一下代碼:
render("index"); } public function actionTest() { // 只在瀏覽器中打印 "test" 字符串,cool return "test"; } }
這里你有沒(méi)有看到use yiiwebController?沒(méi)錯(cuò),Yii2中已充分開(kāi)始使用PHP命名空間,當(dāng)初在Yii1.1的時(shí)候一直聽(tīng)說(shuō)Yii2會(huì)使用更高級(jí)的PHP特性來(lái)完全重寫(xiě),果然啊,點(diǎn)個(gè)贊。而且現(xiàn)在的Controller中,每個(gè)輸出變?yōu)榱朔祷?,就像上面?b>actionTest()一樣,你現(xiàn)在可以完全返回一個(gè)字符串了,有沒(méi)有一絲絲Laravel的影子?不過(guò),你在Yii2的Controller中只需認(rèn)識(shí)這些新特性基本就足矣,因?yàn)橐恍└镜臇|西跟Yii1.1是一樣的撒,完全不用怕,(我是說(shuō)如果你上手過(guò)Yii1.1的話)。
寫(xiě)在最后正如你在這篇文章看到的一樣,在Yii2中幾乎所有的MVC組件變化都使得Yii2更好用了,我相信這會(huì)帶給開(kāi)發(fā)者更好的的開(kāi)發(fā)體驗(yàn),畢竟Yii2中看到了一絲絲優(yōu)雅的樣子!所以,各位還在苦惱應(yīng)該上手哪個(gè)PHP框架的同學(xué)們,請(qǐng)不要猶豫,Yii2就是一個(gè)極好的選擇??顸c(diǎn)這里:http://www.yiiframework.com/
[原文來(lái)自] http://www.jellybool.com/post/yii2-mvc-components
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/31908.html
摘要:而且很明顯地,我們可以看到,一旦輸入框在失去焦點(diǎn)的時(shí)候,如果里面沒(méi)有輸入任何內(nèi)容,每個(gè)輸入框就會(huì)有相應(yīng)的錯(cuò)誤提示,用戶體驗(yàn)很不錯(cuò)。 原文來(lái)自: https://jellybool.com/post/programming-with-yii2-exploring-mvc-forms-a... 上一篇文章我們簡(jiǎn)單地實(shí)現(xiàn)了Yii2框架安裝和Hello World,而在這一篇文章當(dāng)中...
摘要:出于實(shí)戰(zhàn)基礎(chǔ)加之自語(yǔ)言的書(shū)籍出版以來(lái),幾乎所有的編程書(shū)籍都講述了一個(gè)的例子作為開(kāi)始。操作,其實(shí)就是一個(gè)是動(dòng)作的意思,也可以描述為我們前面說(shuō)的響應(yīng)地址。 作者:白狼 出處:http://www.manks.top/document/yii_first_application.html 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究...
摘要:框架最佳實(shí)踐最佳實(shí)踐在設(shè)計(jì)良好的應(yīng)用中,控制器很精練,包含的操作代碼簡(jiǎn)短如果你的控制器很復(fù)雜,通常意味著需要重構(gòu),轉(zhuǎn)移一些代碼到其他類中。層業(yè)務(wù)邏輯層框架由,,組成,執(zhí)行流程一般是在訪問(wèn)獲取數(shù)據(jù),通過(guò)渲染頁(yè)面。 Yii2.0框架 MVC 最佳實(shí)踐 Controller最佳實(shí)踐 在設(shè)計(jì)良好的應(yīng)用中,控制器很精練,包含的操作代碼簡(jiǎn)短; 如果你的控制器很復(fù)雜,通常意味著需要重構(gòu), 轉(zhuǎn)移一些代...
摘要:之前有兩篇文章寫(xiě)了一些關(guān)于的和的,現(xiàn)在來(lái)全局性地看一看相對(duì)于到底有哪些改善。先說(shuō)安裝方法,在中已經(jīng)使用來(lái)管理各種依賴關(guān)系,你在安裝的時(shí)候完全可以用來(lái)進(jìn)行安裝,而且,還支持兩個(gè)不同的安裝版和。 之前有兩篇文章寫(xiě)了一些關(guān)于Yii 2.0的MVC和Yii 2.0的Actived Record,現(xiàn)在來(lái)全局性地看一看Yii 2.0相對(duì)于Yii 1.1到底有哪些改善。個(gè)人總結(jié)有一下幾個(gè): 1.Y...
摘要:高性能始終是的首要目標(biāo)之一。版是上代的老版本,現(xiàn)在處于維護(hù)狀態(tài)。版是一個(gè)完全重寫(xiě)的版本,采用了最新的技術(shù)和協(xié)議,包括依賴包管理器代碼規(guī)范命名空間特質(zhì)等等。所以,我們學(xué)習(xí)版本。啟用本鏡像服務(wù)系統(tǒng)全局配置即將配置信息添加到的全局配置文件中。 工作中需要用到Y(jié)II框架,于是乎,系統(tǒng)的學(xué)習(xí)下這套框架,詳細(xì)教程請(qǐng)看考該站完整系列:YII2教程 一、YII簡(jiǎn)介 1、什么是YII Yii 是一個(gè)高性...
閱讀 3072·2021-11-22 13:54
閱讀 3663·2021-11-16 11:44
閱讀 1443·2021-09-07 10:19
閱讀 1533·2019-08-29 17:30
閱讀 3251·2019-08-29 11:33
閱讀 3598·2019-08-26 12:18
閱讀 2941·2019-08-26 11:53
閱讀 1407·2019-08-26 10:47