成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Yii2系列教程二:MVC Forms 和 Layouts

ThreeWords / 671人閱讀

摘要:而且很明顯地,我們可以看到,一旦輸入框在失去焦點(diǎn)的時(shí)候,如果里面沒(méi)有輸入任何內(nèi)容,每個(gè)輸入框就會(huì)有相應(yīng)的錯(cuò)誤提示,用戶(hù)體驗(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)中,我們會(huì)帶著好奇之心去探索一下在Yii2中的幾個(gè)重要的元素組成:
MVC,FormsLayouts

本文的目標(biāo)是創(chuàng)建一個(gè)小小的表單應(yīng)用,就是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的類(lèi)似發(fā)微博的功能,但是我還不想牽扯到數(shù)據(jù)庫(kù)那一塊,因?yàn)槠鋵?shí)數(shù)據(jù)庫(kù)和表在Yii2框架之中其實(shí)還是有很多東西可以講的,打算在下一篇的文章中會(huì)詳細(xì)講到。

MVC

模型(Model)對(duì)于我個(gè)人的簡(jiǎn)單理解就是一個(gè)概念集合,在這個(gè)集合里面包含該概念集合的多種數(shù)據(jù),比如一個(gè)User會(huì)有姓名,性別等多個(gè)屬性,這個(gè)概念集合通常就是對(duì)于數(shù)據(jù)庫(kù)的一張表(如果還沒(méi)有對(duì)應(yīng)的數(shù)據(jù)表,則可以看作是一個(gè)集合的屬性);而每一個(gè)具體的實(shí)例概念就對(duì)應(yīng)一條數(shù)據(jù)記錄。比如在這一篇文章之中我們會(huì)創(chuàng)建一個(gè)Status模型,代表狀態(tài)(來(lái)源于生活:發(fā)一條狀態(tài)),這個(gè)Status會(huì)有兩個(gè)重要的屬性,textpermissions,text就是狀態(tài)本身,permissions是狀態(tài)的權(quán)限。

視圖(Views)通過(guò)控制器想模型請(qǐng)求數(shù)據(jù),并將數(shù)據(jù)以某種特定的版式展示給用戶(hù)。

控制器(Controller)可以向ModelViews發(fā)送不同的指令,一般是向Model取數(shù)據(jù),然后讀取視圖文件來(lái)渲染輸出數(shù)據(jù)。

在Yii2的應(yīng)用中,一般是這樣的:某個(gè)URL指向某個(gè)控制器的特定action,然后控制器負(fù)責(zé)向特定的模型取數(shù)據(jù),然后將數(shù)據(jù)分配給視圖渲染輸出。

在這里說(shuō)一下我個(gè)人的觀點(diǎn),我覺(jué)得其實(shí)在MVC當(dāng)中,可能應(yīng)該做事最多的應(yīng)該是Model,與之相迎合的是,ControllerViews則相對(duì)要輕一些,Controller負(fù)責(zé)協(xié)調(diào)ModelViews,Views負(fù)責(zé)展示數(shù)據(jù)。

在Yii2的項(xiàng)目當(dāng)中,我們將models文件放在/models/目錄之下,所以我們?cè)谶@個(gè)文件夾之下創(chuàng)建Status.php

```
"Private",self::PERMISSIONS_PUBLIC=>"Public");
    }

    public function getPermissionsLabel($permissions) {
      if ($permissions==self::PERMISSIONS_PUBLIC) {
        return "Public";
      } else {
        return "Private";        
      }
    }
}

```

這里需要注意的是rules()這個(gè)方法,它會(huì)觸發(fā)Yii自帶的表單驗(yàn)證規(guī)則,比如這里就是textpermissions這兩個(gè)表單輸入框都不能為空,至于getPermissions()這個(gè)方法是為了在使用dropdown輸入框的時(shí)候使用的。

Status模型創(chuàng)建好之后,我們就可以接著創(chuàng)建對(duì)應(yīng)的控制器和方法。在平時(shí)的開(kāi)發(fā)中我習(xí)慣是為每一個(gè)模型都創(chuàng)建一個(gè)對(duì)應(yīng)的控制器,里面一般都是包含幾個(gè)最常見(jiàn)的方法:index, create, store, update, delete等。這里我創(chuàng)建一個(gè)StatusController.php,這個(gè)文件應(yīng)該是位于/controllers/文件夾當(dāng)中,而我們希望實(shí)現(xiàn)一個(gè)發(fā)表狀態(tài)的功能,我們必須需要一個(gè)create操作方法,比如我們的目的是:在用戶(hù)訪問(wèn)http://localhost:8999/status/create的時(shí)候,我們可以展示創(chuàng)建一條狀態(tài)的頁(yè)面給用戶(hù)。

```
load(Yii::$app->request->post()) && $model->validate()) {
            //  $model 有post數(shù)據(jù)時(shí)直接展示
            return $this->render("view", ["model" => $model]);
        } else {
            // 沒(méi)有數(shù)據(jù)的時(shí)候,直接渲染create視圖
            return $this->render("create", ["model" => $model]);
        }
    }
}

```

首先,根據(jù)URL的規(guī)則,我們創(chuàng)建了一個(gè)actionCreate()方法,在這個(gè)方法里,我們通過(guò)條件判斷來(lái)確定展示某個(gè)特定的視圖。

創(chuàng)建好控制器和方法之后,我們就可以走到下一步了:創(chuàng)建視圖。在Yii2中,視圖文件的存放位置跟控制器的名字是息息相關(guān)的,比如上面我們創(chuàng)建了一個(gè)StatusController,我們現(xiàn)在首先需要在views/創(chuàng)建一個(gè)status/文件夾,然后在這個(gè)文件夾里創(chuàng)建各個(gè)跟StatusController相關(guān)的視圖文件,比如上面actionCreate()return $this->render()兩個(gè)視圖:view.phpcreate.php

Forms

首先,我們需要一個(gè)Create視圖來(lái)展示我們創(chuàng)建Status的表單(create.php):



    field($model, "text")->textArea(["rows" => "4"])->label("Status Update"); ?>

    field($model, "permissions")->dropDownList($model->getPermissions(), 
             ["prompt"=>"- Choose Your Permissions -"]) ?>

    
"btn btn-primary"]) ?>

在我們平時(shí)開(kāi)發(fā)web應(yīng)用的時(shí)候,表單幾乎總是每時(shí)每刻都得存在,只要是需要收集信息的地方就需要表單。而Yii2在對(duì)表單支持這方面做得非常不錯(cuò),就如你看到的一樣,上面的Yii2 ActiveForm就是Yii2內(nèi)置的用來(lái)幫助我們生成表單的小組件,這里需要注意的是dropDownList這個(gè)輸入框式怎么實(shí)現(xiàn)的,它直接使用了getPermissions(),這個(gè)方法正好返回了一個(gè)我們需要的數(shù)組。

這時(shí)候訪問(wèn):http://localhost:8999/status/create 就可以看到上面創(chuàng)建的表單了:

至于為什么就自動(dòng)排版好了,不用我們寫(xiě)css,那是因?yàn)閅ii2默認(rèn)會(huì)給我們加載Bootstrap的css文件,所以我們?cè)谑褂玫臅r(shí)候直接指定類(lèi)名就OK了。而且很明顯地,我們可以看到,一旦輸入框在失去焦點(diǎn)的時(shí)候,如果里面沒(méi)有輸入任何內(nèi)容,每個(gè)輸入框就會(huì)有相應(yīng)的錯(cuò)誤提示,用戶(hù)體驗(yàn)很不錯(cuò)。這個(gè)其實(shí)是得益于我們?cè)赟tatus模型中聲明的rules()方法,Yii2會(huì)根據(jù)指定的規(guī)則通過(guò)js在前端給出相應(yīng)的驗(yàn)證。

然后我們嘗試填入一些內(nèi)容,你就會(huì)看到輸入框的變化了:

點(diǎn)擊Submit 按鈕,表單會(huì)提交到StatusControlleractionCreate()方法,一旦有post數(shù)據(jù)傳過(guò)來(lái),就會(huì)渲染view.php視圖:


到這里,其實(shí)我們就走通整個(gè)MVC的過(guò)程,并且在這個(gè)過(guò)程中,我們順帶說(shuō)了一下Forms的知識(shí)點(diǎn)。

Layouts

為什么要說(shuō)Layouts呢?因?yàn)長(zhǎng)ayouts在Yii中其實(shí)可以看作是視圖中經(jīng)常重復(fù)用到的部分,比如一個(gè)HTML文件的header,navigation barfooter等,這些都是幾乎是在每一個(gè)視圖文件中都會(huì)用到,所以Yii采取了一種一勞永逸的方法來(lái)管理這些共用的部分:Layouts就應(yīng)運(yùn)而生。這樣你就不用在每一個(gè)view文件中重復(fù)不必要的代碼了,而且又特別好管理。

Yii允許你創(chuàng)建多個(gè)Layouts,不過(guò)我貌似還沒(méi)遇到那樣的使用場(chǎng)景,所以還是無(wú)法給出有實(shí)證的說(shuō)法,不管怎么說(shuō),一個(gè)Layouts就基本夠用了。

最后,我們借著Layouts的東風(fēng)來(lái)看看我們?cè)趺葱薷囊幌耏ii2的默認(rèn)導(dǎo)航欄:添加一個(gè)新的導(dǎo)航。

在上一節(jié)我就提到過(guò)viewslayoutsmain.php這個(gè)文件,里面的具體結(jié)構(gòu)你可以直打開(kāi)來(lái)看看,我們這里改動(dòng)的是Nav::widget這部分:

  echo Nav::widget([
                "options" => ["class" => "navbar-nav navbar-right"],
                "items" => [
                    ["label" => "Home", "url" => ["/site/index"]],
                    [
                        "label" => "Status",
                        "items" => [
                            ["label" => "Create", "url" => ["/status/create"]],
                        ],
                    ],
                    ["label" => "About", "url" => ["/site/about"]],
                    ["label" => "Contact", "url" => ["/site/contact"]],
                    Yii::$app->user->isGuest ?
                        ["label" => "Login", "url" => ["/site/login"]] :
                        ["label" => "Logout (" . Yii::$app->user->identity->username . ")",
                            "url" => ["/site/logout"],
                            "linkOptions" => ["data-method" => "post"]],
                ],
            ]);

我們?cè)诒緛?lái)的基礎(chǔ)之上添加了下面這個(gè)內(nèi)容:

 [
    "label" => "Status",
    "items" => [
        ["label" => "Create", "url" => ["/status/create"]],
    ],
],

這樣之后,刷新一下頁(yè)面,你就可以看到我們的導(dǎo)航變化了。而且很神奇的是:這里還實(shí)現(xiàn)了dropdown menu的功能,這個(gè)其實(shí)就是使用Bootstrapdropdown menu來(lái)實(shí)現(xiàn)的。

嗯,這篇文章貌似講得差不多了,至少我不知道還改講些什么了,接下來(lái)的文章我會(huì)嘗試講講Yii2的數(shù)據(jù)庫(kù)相關(guān)的內(nèi)容,先睡覺(jué)。

  

源碼會(huì)放在 Github:https://github.com/JellyBool/helloYii

Happy Hacking

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21049.html

相關(guān)文章

  • Yii2系列教程三:Database And Gii

    摘要:但是這還沒(méi)有完,因?yàn)槲覀冞€需要對(duì)我們的做一些些小改動(dòng),主要是在的改動(dòng)在這里,我們添加下面這兩行來(lái)保障我們?cè)诓迦霐?shù)據(jù)的時(shí)候,和不為空。 原文來(lái)自:https://jellybool.com/post/programming-with-yii2-working-with-the-data... 上一篇文章我們理了一下Yii2的MVC,F(xiàn)orms和Layouts,這篇文章就直接按照...

    wemallshop 評(píng)論0 收藏0
  • Yii2系列教程四:實(shí)現(xiàn)用戶(hù)注冊(cè),驗(yàn)證,登錄

    摘要:開(kāi)始使用郵箱配置好了之后,我們就可以開(kāi)始使用了,首先我們來(lái)修改一下我們的導(dǎo)航欄,因?yàn)槲覀兿雽?shí)現(xiàn)的就是我們常??吹降脑趯?dǎo)航欄的右側(cè)的注冊(cè)和登錄按鈕。 原文來(lái)自: https://jellybool.com/post/programming-with-yii2-integrating-user-regi... 本來(lái)打算昨晚寫(xiě)的這篇教程,但是忙著約會(huì)去了,所以現(xiàn)在補(bǔ)上吧。 上一篇...

    boredream 評(píng)論0 收藏0
  • yii2搭建完美后臺(tái)并實(shí)現(xiàn)rbac權(quán)限控制實(shí)例教程

    摘要:利用渲染后臺(tái)模板后臺(tái)的模板我們采用利用插播一曲是一個(gè)完全響應(yīng)管理模板?;诳蚣埽锥ㄖ颇0?。適合多種屏幕分辨率,從小型移動(dòng)設(shè)備到大型臺(tái)式機(jī)。內(nèi)置了多個(gè)頁(yè)面,包括儀表盤(pán)郵箱日歷鎖屏登錄及注冊(cè)錯(cuò)誤錯(cuò)誤等頁(yè)面。 作者:白狼 出處:http://www.manks.top/yii2_fra... 本文版權(quán)歸作者,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保...

    neu 評(píng)論0 收藏0
  • yii2實(shí)戰(zhàn)教程之第一個(gè)Yii程序

    摘要:出于實(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è)面明顯位置給出原文連接,否則保留追究...

    Near_Li 評(píng)論0 收藏0
  • YII2快速學(xué)習(xí)筆記

    摘要:高性能始終是的首要目標(biāo)之一。版是上代的老版本,現(xiàn)在處于維護(hù)狀態(tài)。版是一個(gè)完全重寫(xiě)的版本,采用了最新的技術(shù)和協(xié)議,包括依賴(lài)包管理器代碼規(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è)高性...

    kbyyd24 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<