日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

yii2 basic版 MVC 部分

發(fā)布時間:2025/3/15 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 yii2 basic版 MVC 部分 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、model

1、什么是模型

  • 模型是 MVC 模式中的一部分,是表現(xiàn)業(yè)務(wù)數(shù)據(jù)、規(guī)則和邏輯的對象
  • 可通過繼承 yii\base\Model 或它的子類(activeRecord)來定義模型類,基類 yii\base\Model 支持許多實用的特性
  • Model 類也是更多高級模型例如 Active Record 活動記錄的基類。

2、yii\base\Model 支持以下實用特性:

屬性 : 表現(xiàn)業(yè)務(wù)數(shù)據(jù),可以像普通類屬性或數(shù)組一樣被訪問 (e.g. public $name)
屬性標簽 :指定屬性顯示出來的標簽 (例如: models\ContactForm 類,function attributeLabels(){} 方法里面定義的就是屬性標簽)

public function attributeLabels() {return ['verifyCode' => 'Verification Code', // 所有的verifyCode 屬性在頁面中都顯示為 Verification Code'name' => '姓名', // 所有的 name 屬性在也面中都顯示為 "姓名" 兩個字]; }

3、塊兒賦值 :支持一步給許多屬性賦值;

$model->load(Yii::$app->request->post()) # 使用load()方法進行塊兒賦值,$app->request->post()獲取所有由前臺提交過來的數(shù)據(jù)

4、驗證規(guī)則 :確保數(shù)據(jù)數(shù)據(jù)符合所申明的驗證規(guī)則(例如在 models\ContactForm 類,function rules(){} 方法里面定義)

public function rules() {return [[['name', 'email', 'subject', 'body'], 'required'], // name, email, subject 和 body are 都是必填字段['name','integer'], // name 必須是整數(shù)['name','compare','compareValue'=>30,'operator'=>'>='], // name >=30['email', 'email'], // email 必須是一個合法的郵箱地址['verifyCode', 'captcha'], // 驗證碼必須填寫正確]; }

驗證時采用 yii\base\Model::validate() 方法觸發(fā)數(shù)據(jù)驗證,如果有數(shù)據(jù)驗證失敗,將自動把 yii\base\Model::hasErrors() 屬性置為 true,
可以使用 yii\base\Model::getErrors() 來查看錯誤詳情。e.g:

<?php $model = new EntryForm(); $model -> name = 'Carroll'; $model -> email = 'wrong'; if($model -> validate()){// 驗證成功 }else{// 驗證失敗// 使用 $error = $model -> getErrors(); var_dump($errors); 獲取錯誤詳情。 }
  • yii\base\Model 用于普通模型類的父類并與數(shù)據(jù)表無關(guān)
  • yii\base\activeRecord 用于普通模型類的父類并與數(shù)據(jù)表有關(guān)
  • yii\base\activeRecord 也是繼承 yii\base\Model ,但是增加了數(shù)據(jù)庫處理


5、表與表之間的關(guān)聯(lián)多對一或者一對一,例如文章對應(yīng)文章狀態(tài),使用 hasOne()

/** * 建立文章類和文章狀態(tài)類之間的聯(lián)系,建立起這種聯(lián)系后,相當于原來的 Post 類就多了一個屬性 status0,這個屬性值是文章狀態(tài)類的對象 * 獲取狀態(tài)名可以使用:$thePost->status0->name 來獲取 */ public function getStatus0() {return $this->hasOne(Poststatus::className(), ['id' => 'status']); // Poststatus::className 是文章狀態(tài)表的表名,['id' => 'status']是關(guān)聯(lián)的條件 }

? (一對多,例如文章對應(yīng)文章評論,使用 hasMany() ?)

/*** Post 類多了一個 commets 屬性,這個屬性是一個數(shù)組,數(shù)組是由評論對象組成的* 獲取評論使用:$Post -> comments 來獲取,但它是一個對象數(shù)組,如果要訪問具體的某個對象,就需要用 foreach 來遍歷*/public function getComments(){return $this->hasMany(Comment::className(), ['post_id' => 'id']);}

二、view

1、布局文件

  • 布局是一種特殊的視圖,代表多個視圖的公共部分,默認使用 views/layouts/main.php

2、如何創(chuàng)建布局

  • 布局也是視圖,它可以像普通視圖一樣創(chuàng)建
  • 布局默認存儲在 @app\view\layouts 下面

3、如何變幻布局

  • 默認會使用 @app\view\layouts\main.php布局文件
  • 更換整個類中的布局 : public $layout = 'dcr';
  • 更換某一個頁面的布局 : 在方法中添加 $this -> layout = 'dcr';
  • 如果一個頁面不需要任何布局,只需要在方法中設(shè)置 $this->layout=false;

4、布局文件的數(shù)據(jù)

  • 兩個預(yù)定義變量 $this $content
  • 和視圖中的 $this 一樣,$this 指向 yii\web\View 的實例
  • $content 就是控制器渲染出來的結(jié)果,每一頁的結(jié)果都不同。

5、布局文件的結(jié)構(gòu)

<?php $this->beginPage() ?>     // 在布局的開始處調(diào)用 $this 指向 yii\web\view 來管理和渲染這個視圖文件,用來標識一個html文件的開始 <html><head><?php $this->header() ?> // 在 head 標簽處調(diào)用,標識html文件頭部的位置</head><body><?php $this->beginBody() ?> // 在 body 的開始處調(diào)用,標識 html 文件 body 部分的起始位置<?php $this->endBody() ?> // 在 body 的起始處調(diào)用,標識 html 文件 body 部分的結(jié)束位置</body> </html> <?php $this->endPage() ?>      // 在布局的結(jié)尾處調(diào)用,用來標識一個html文件的結(jié)束

?

6、使用 <?=Html::encode($variable) ?> 可以防止被惡意JavaScript xss(跨站腳本)攻擊,就是使用htmlspecialchars()將預(yù)定義字符轉(zhuǎn)換為 html 實體

  htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE,'UTF-8', true);

  • ENT_QUOTES - 編碼雙引號和單引號
  • ENT_SUBSTITUTE - 把無效的編碼替代成一個指定的帶有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一個空的字符串。

7、render 在 view 中的應(yīng)用:

<?= $this->render('_form', [ 'model' => $model, ]) ?>
  • _form 是同目錄下的一個文件,專門用來展示表單
  • model 是從數(shù)據(jù)庫查詢的對象數(shù)組

三、controller

1、控制器

  • ?MVC 結(jié)構(gòu)中的 c 部分
  • ?從 yii\base\Controller 繼承而來
  • 具體來說,是從模型對象中拿到需要的數(shù)據(jù),然后調(diào)用視圖模板文件來渲染這些數(shù)據(jù),然后生成輸出響應(yīng)信息

?2、組成

  • 控制器主要有動作組成
  • 動作是控制器類中的方法
  • 一個動作對應(yīng)一個頁面

3、render()

查看方法:從類參考手冊中的yii\web\controller\所有方法中查看render()方法
public string render($view,$params=[])

  • $view 指視圖名
  • $params 是傳給視圖的數(shù)據(jù)
  • 返回的是字符串,就是渲染好的結(jié)果
  • 還有視圖或文件不存的時候拋出的異常

4、控制器中的方法

  • ?Yii 使用 action 前綴區(qū)分普通方法和操作。action 后面的操作被映射為操作的 ID
  • ?若方法名有多個單詞組成,那么 視圖名由連字符連接,例如:
public function actionSayHello($message='Hello') {return $this->render('say-hello',['message'=>$message]); }

?

5、yii\web\Request::post() 方法負責收集用戶提交的數(shù)據(jù)

public function actionEntry(){$model = new EntryForm;if($model->load(Yii::$app->request->post())&&$model->validate()){return $this->render('entry-confirm',['model'=>$model]);}else{return $this->render('entry',['model'=>$model]);} }
  • Yii::$app 代表應(yīng)用實例,是一個可全局訪問的單例,能提供 request、response、db 等特定功能的組件

?注:本文為作者(44106-kangaroo) 看完魏羲教你學Yii2.0 視頻后所記,如有轉(zhuǎn)載請注明出處:http://www.cnblogs.com/chrdai/p/8004737.html

轉(zhuǎn)載于:https://www.cnblogs.com/chrdai/p/8004737.html

總結(jié)

以上是生活随笔為你收集整理的yii2 basic版 MVC 部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。