成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解

Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解

熱門標簽:長沙crm外呼系統(tǒng)業(yè)務 江蘇外呼電銷機器人報價 南寧高頻外呼回撥系統(tǒng)哪家好 離石地圖標注 電話機器人危險嗎 專業(yè)電話機器人批發(fā)商 400電話申請方法收費 深圳外呼系統(tǒng)收費 400電話辦理福州市

前言

場景,顧名思義,就是一個情景,一種場面。在yii2中也有場景,這個場景跟你所理解的場景含義差不多。

和用戶有交互的系統(tǒng)必不可少的功能包括收集用戶數(shù)據(jù)、校驗和處理。實際業(yè)務中,往往還需要將數(shù)據(jù)進行持久化存儲。出于安全考慮,開發(fā)人員應當牢牢把握“客戶端的輸入都是不可信”的準則,客戶端傳過來的數(shù)據(jù)先進行過濾和清洗后再存儲或傳遞到內(nèi)部系統(tǒng)。

Yii2推薦使用Model類來收集和校驗用戶數(shù)據(jù),持久化的ActiveRecord類是其子類。Model類的load和validate兩個方法,分別用來收集和校驗客戶端數(shù)據(jù)。哪些數(shù)據(jù)應該被收集,哪些數(shù)據(jù)需要在什么場景下驗證,便是本文的主題:場景(scenario)和驗證規(guī)則(rule)。

下面話不多說了,來隨著小編一起看看詳細的介紹吧。

系統(tǒng)結構

先引入一個簡單的業(yè)務系統(tǒng):系統(tǒng)中存在學生和教師兩種角色,數(shù)據(jù)庫中使用了三張表保存角色信息:

user: [id, username, password, status, 其他通用屬性]

student: [id, user_id, student_no, grade, class, 其他學生屬性]

teacher: [id, user_id, work_no, title, telphone, 其他教師屬性]

實際業(yè)務不限于對這三張表的增刪查改操作。為了簡化問題,后續(xù)僅討論user和student兩張表的數(shù)據(jù)變更(給出teacher表是為了讓讀者不認為設計數(shù)據(jù)庫的人是腦殘:明明可以放到一張表的,為什么要拆開!)。

學生報名

學生報名是典型的增刪查改操作,送分題。學生報名的簡要代碼示例如下:

public function actionSignup()
{
 $data = Yii::$app->request->post();
 $user = new User();
 $user->load($data);
 if ($user->save()) {
  $student = new Student([
   "user_id" => $user->id,
  ]);
  $student->load($data);
  if ($student->save()) {
   // redirect to success page
  } else {
   $user->delete();
  }
 }
 // render error page
}

相信有Yii2使用經(jīng)驗的人都能根據(jù)數(shù)據(jù)庫的字段約束快速的把User和Student類的rules方法寫出來。例如User類文件內(nèi)容可能如下:

namespace app\models;
class User extends \yii\db\ActiveRecord
{
 public function rules()
 {
  return [   [["username", "password", "status",], "required"],
   ["username", "unique"],
   // other rules
  ];
 }
 // other method
}

定義數(shù)據(jù)的驗證規(guī)則,這是大多數(shù)人對rules的第一印象,并且是一個很好的印象:它打回非法的數(shù)據(jù),讓正常的數(shù)據(jù)進入系統(tǒng)中。安全的實踐應該盡量定義完整的規(guī)則,充分驗證數(shù)據(jù)。也建議每一個Yii2開發(fā)人員對內(nèi)置的核心校驗器熟悉。

修改信息

修改信息,也是典型的增刪查改操作。實現(xiàn)代碼和報名差別不大,這里僅討論兩點:

1、用戶密碼的驗證

注冊時會校驗用戶密碼是否8-16位,密碼的規(guī)則可能是: ["password", "string", "length" => [8, 16]] 。明文保存密碼是不可取的,插入數(shù)據(jù)庫時至少會做MD5加密,password變成32位。假設用戶修改信息時未修改密碼,再次保存時密碼規(guī)則校驗出錯(長度不符合),無法保存!

怎么解決這個問題呢?翻閱Yii文檔,發(fā)現(xiàn)了規(guī)則中的when屬性可以救場。一種可能的驗證規(guī)則是:

public function rules()
{
 return [
   ["password", "string", "length" => [8, 16], 'when' => function ($model) {
    return $model->isNewRecord;
   }],
   // other rules
  ];

只有在注冊(新增數(shù)據(jù))時才校驗密碼字段。問題解決,完美!

2、防止用戶私自改密碼

假設有個小聰明的家伙(例如湯姆),發(fā)現(xiàn)系統(tǒng)是用Yii框架做的,想搞點小破壞炫耀一下水平。在發(fā)送修改信息的表單時,湯姆增加password=12345678這一段數(shù)據(jù)。系統(tǒng)使用$user->load($data)收集用戶輸入,更新password字段,帶來如下后果:rules設置更新時不校驗密碼字段,12345678直接作為password的值保存到數(shù)據(jù)庫中。這個操作帶來連鎖反應:用戶再次登錄時,加密過后的密碼與數(shù)據(jù)庫中的明文密碼不匹配,導致湯姆無法登錄系統(tǒng)。煩人的是湯姆是個刺頭,登錄不上后整天騷擾客服,不省心!

怎么樣防止這種情況出現(xiàn)呢?一種解決的方法是阻止修改密碼:

unset($data["password"]); 
$user->load($data);
// 或者
$password = $user->password;
$user->load($data);
$user->password = $password;

把用戶輸入的密碼過濾掉,私自修改密碼的問題就解決了。

但是問題還沒有結束:湯姆可以轉向修改其他字段,比如說性別,身份證等。更嚴重情況是修改student中user_id,就可以更改任意學生的信息。事情十分嚴重,需要馬上修復漏洞。

可以按照密碼的方法,逐個屏蔽受保護屬性,但顯得啰嗦難看(雖然好使)。如果受保護屬性多,可以僅允許白名單進入,具體操作為:新增一個UpdateInfoForm類繼承Model,屬性是白名單屬性合計。用UpdateInfoForm類過濾用戶數(shù)據(jù),校驗通過后再更新到user和student中:

$form = new UpdateInfoForm();
$form->load($data);
if ($form->validate()) {
 $user->load($form->attributes);
 $student->load($form->attributes);
 // next biz
}

這種方式更優(yōu)雅,但仔細一想代價不?。簩傩院万炞C規(guī)則要重復寫一遍;user和student保存時又重復校驗屬性。這種方式看起來優(yōu)雅,實際上卻冗余又低效。

scenario的登場,完美的解決解決上述問題。

場景(scenario)

分析上面問題,會發(fā)現(xiàn)關鍵點是批量賦值(massive assignment)和數(shù)據(jù)校驗(validate)兩個方法。如果對不同的場景指定賦值字段和檢驗規(guī)則,問題就迎刃而解。

Yii中的scenario有 安全屬性 和 活躍屬性 兩個概念。安全屬性用在批量賦值的load方法,只有安全屬性才能被賦值;活躍屬性用在規(guī)則校驗的validate方法,在活躍屬性集中并且定義了校驗規(guī)則的屬性才會被校驗?;钴S屬性和安全屬性的關系是,安全屬性是活躍屬性的子集。

\yii\base\Model類定義了默認場景:SCENARIO_DEFAULT(值為default)。默認場景下,出現(xiàn)在rules方法中的屬性既是活躍屬性,又是安全屬性(這句話基本正確,看后續(xù)解釋)。為不同場景指定活躍屬性、安全屬性以及校驗器,可以通過覆蓋senarios或rules兩個方法實現(xiàn)(幾乎每個Model類都會重寫rules方法,senarios用得少)。

rules

先看rules方法。默認的屬性加校驗器定義方式,讓每個屬性既是安全屬性,也是活躍屬性。如果想讓某個屬性不是安全屬性(不能通過load批量賦值),在屬性名前加感嘆號!即可。例如student中的user_id字段:

public function rules()
{
 return [
  ["!user_od", "required"],
  ["!user_id", "integer"],
  ["!user_od", "unique"],
  // other rules
 ];
}

user_id是活躍屬性,在寫入數(shù)據(jù)庫時會被校驗。但它不是安全屬性,不能通過load方法進行賦值,解決了安全隱患。

再看rules方法按場景區(qū)分校驗器規(guī)則的做法:定義校驗器時on屬性指定規(guī)則在哪些場景下生效,except屬性則排除一些場景(如果不指定on和except,規(guī)則對所有場景生效)。例如:

public function rules()
{
 return [
  ["password", "string", "length" => [8, 16], "on" => ["signup"]], // 僅在signup場景時才被驗證
  ["status", "integer", "except" => ["signup"], // 除了signup場景,其他情況都校驗
  // other rules
 ];
}

在原來基礎上新增感嘆號和on/except屬性,非常簡便的就定義了非安全屬性以及分場景指定校驗規(guī)則。

scenarios

另外一種更清晰定義安全屬性和活躍屬性的做法是重寫scenarios方法。scenarios方法返回一個數(shù)組,數(shù)組的鍵是場景名稱,值是活躍屬性集合(包飯安全屬性)。例如student表的可能實現(xiàn)如下:

public function scenarios()
{
 return [
  self::SCENARIO_DEFAULT => ["!user_id", "grade", "class", xxxx],
  "update" => ["grade", "class", xxxx],
 ];
}

默認情形下(學生報名),年級、班級這些信息是安全屬性,但user_id不是,只能在程序內(nèi)部賦值,并在插入數(shù)據(jù)時被校驗;在修改信息時,user_id不是活躍屬性,既不能被批量賦值,也不需要校驗(事實上它不應該改變)。

scenarios方法只能定義活躍屬性和安全屬性,無法定義校驗規(guī)則,需要和rules配合使用。

總結

金肯定義完善的數(shù)據(jù)校驗規(guī)則

業(yè)務復雜時定義多個場景,仔細為每個場景定義安全屬性和校驗規(guī)則

優(yōu)先使用rules;屬性較多、rules復雜時,可以配合scenarios方法迅速理清安全屬性和活躍屬性

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考

http://www.yiiframework.com/doc-2.0/guide-input-validation.html

您可能感興趣的文章:
  • 關于Yii中模型場景的一些簡單介紹
  • Yii2中簡單的場景使用介紹
  • Yii 2.0中場景的使用教程
  • Yii2.0框架behaviors方法使用實例分析
  • yii2.0框架使用 beforeAction 防非法登陸的方法分析
  • YII2.0框架行為(Behavior)深入詳解
  • Yii2.0框架實現(xiàn)帶分頁的多條件搜索功能示例
  • Yii2.0 RESTful API 基礎配置教程詳解
  • 修改yii2.0用戶登錄使用的user表為其它的表實現(xiàn)方法(推薦)
  • yii2.0框架場景的簡單使用示例

標簽:白酒營銷 株洲 濱州 興安盟 南京 南昌 曲靖 太原

巨人網(wǎng)絡通訊聲明:本文標題《Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解》,本文關鍵詞  Yii2,中的,場景,scenario,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解》相關的同類信息!
  • 本頁收集關于Yii2中的場景(scenario)和驗證規(guī)則(rule)詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    japan高清日本乱xxxx| 欧美亚洲网站| 日韩av高清在线观看| 疯狂揉花蒂控制高潮h| 99久久久久久中文字幕一区| 欧美人在线视频| 在线观看91精品国产麻豆| 国产一级揄自揄精品视频| 久久国产精品一区二区| 九九在线精品视频| 色欧美日韩亚洲| 97人人爽人人| 久久精品视频中文字幕| 最新国产成人av网站网址麻豆| 国产精品久久久久久久蜜臀| 国产精品777一区二区| 国产精品乱码视频| 午夜精品免费在线| 日本a级片电影一区二区| 亚洲一区二区四区蜜桃| 国产精品久久久久久久app| 无码国产精品96久久久久| 久久成人免费网站| 欧美性感美女一区二区| 国产一级中文字幕| 欧美国产日韩电影| 国产极品人妖在线观看| 欧美高清3dfreexxxx性| 色先锋久久影院av| 黄色录像a级片| www.久久久.com| 男人天堂v视频| 日本不卡1234视频| 日本黄网免费一区二区精品| 日本中文字幕观看| www.午夜av| 国产精品一卡二卡在线观看| 午夜影视一区二区三区| 欧美一级在线视频| 欧美一级全黄| 日日躁天天躁狠狠躁| 欧美肉大捧一进一出免费视频| 久久免费激情视频| 一本本久综合久久爱| ady日本映画久久精品一区二区| 国产小视频你懂的| 久草精品在线播放| 国产一区二区三区四区三区四| 成年在线观看视频| 在线电影国产精品| 欧美日韩一二三四| 97人人澡人人爽| 久久久福利视频| 久久综合图区亚洲综合图区| 国产视频在线观看一区二区| 日本激情视频在线播放| av免费观看在线| 色多多国产成人永久免费网站| 欧美一区国产| www.亚洲视频.com| 天堂а√在线最新版中文在线| 91丨九色丨海角社区| 李宗瑞系列合集久久| 欧美一区二区性放荡片| 精品国产伦一区二区三区| 成年网站在线观看视频| 欧美在线视频不卡| www.中文字幕.com| 欧美日韩高清在线| 成年人福利网站| 精品av中文字幕在线毛片| 久久综合给合久久狠狠狠97色69| 欧美高清精品一区二区| 午夜精品在线播放| 国产精品三级视频| 国产欧美一区二区三区精品观看| 国产精品一区二区三区四| 国产精品视频线看| 玩弄japan白嫩少妇hd| eeuss一区二区三区| 国内精品久久久久久久97牛牛| 91精品91久久久中77777老牛| 激情综合在线| 精品在线视频一区二区| av中文字幕亚洲| www.久久久久久久久久| 91麻豆精品成人一区二区| 天天操天天干天天综合网| 国产精品国模大尺度私拍| 亚洲国产精品成人天堂| 亚洲黄色有码视频| 日韩综合第一页| 亚洲国产精品久久卡一| 三上悠亚在线免费观看| 精品国产一区二区三区久久久蜜月| 羞羞视频在线观看一区二区| 精品在线视频一区二区| 欧美成人高清| 午夜免费精品视频| 欧美猛男gaygay网站| 欧美国产一区视频在线观看| 啦啦啦高清在线观看www| 97人妻精品一区二区三区软件| 亚洲精品天堂成人片av在线播放| 国产精品久久久久久一区二区三区| 亚洲婷婷久久综合| 思99热精品久久只有精品| 亚洲精品国产无套在线观| 一本一道波多野结衣一区二区| 黄色正能量网站| 精品1区2区3区4区| 国产精品亚洲第一| 国产a√精品区二区三区四区| 精品人妻少妇嫩草av无码专区| 综合在线观看色| 国产精品h视频| 婷婷五月综合缴情在线视频| 四虎成人影院网址| 欧美日韩二三区| 国产综合色精品一区二区三区| 中文字幕精品在线不卡| 欧美变态另类刺激| 日本午夜在线亚洲.国产| 图片一区二区| 狠狠人妻久久久久久综合麻豆| 男人操女人动态图| 欧美婷婷六月丁香综合色| 欧美又粗又大又长| 亚洲天堂网在线播放| 欧美日韩在线大尺度| 男人天堂午夜在线| 强乱中文字幕av一区乱码| 91精品视频在线| 国产激情无码一区二区三区| 国产农村av| 国产成人av免费看| 美女xx视频| 漫画在线观看av| a级片在线免费看| 国内精品不卡一区二区三区| 久久久精品999| 欧美一区日本一区韩国一区| 日韩欧美国产成人一区二区| sdde在线播放一区二区| 高清在线视频日韩欧美| 丰满少妇乱子伦精品看片| 亚洲欧美精品中文字幕在线| 中文字幕在线中文字幕日亚韩一区| 夜夜操天天操亚洲| 国产网站一区二区| 天天插天天操天天射| 年下总裁被打光屁股sp| 91亚洲成人| 中文字幕精品久久久久| 女人被狂躁c到高潮| 亚洲激情一区二区三区| 99国产成+人+综合+亚洲欧美| 欧美偷拍视频| 97在线看免费观看视频在线观看| 99久久国产综合精品麻豆| 国产剧情av麻豆香蕉精品| 欧美精品在线视频观看| 精品久久久久久无码国产| 久久嫩草精品久久久久| 少妇性饥渴无码a区免费| 99国产欧美久久久精品| 涩爱av在线播放一区二区| 欧美人成在线观看网站高清| 91网站在线播放| 祥仔av免费一区二区三区四区| 91在线视频播放地址| 美女黄毛**国产精品啪啪| 日韩av免费观影| 制服丝袜av在线| 怡红院男人天堂| 亚洲精品欧美二区三区中文字幕| 久久青草欧美一区二区三区| 国产深夜精品福利| 成人福利网站在线观看| аⅴ资源天堂资源库在线| 91国内在线| 欧美三级视频在线播放| 亚洲精品资源| 国产欧美一区二| 久久亚洲一区二区| 欧美黑人狂野猛交老妇| 中文字幕一区二区三区在线观看| 亚洲成人黄色小说| 国产一级18片视频| 亚洲黄色成人久久久| 国精产品视频一二二区| 成人全视频在线观看在线播放高清| 亚洲精品观看| 日日摸日日添日日躁av| 亚洲av鲁丝一区二区三区| 亚洲国产免费av| 免费黄色一级网站| 亚洲爆乳无码一区二区三区| 日本一区二区三区久久| 久久久久久青草| 在线观看网站免费入口在线观看国内| 美女高潮久久久| 亚洲一区精品视频| av免费看在线| 欧美日韩一区二区在线观看| 一代武则天秘史| 国产成人一区二区三区影院在线| 欧美不卡在线| 日本一区二区免费看| 久久精品首页| 色琪琪原网站亚洲香蕉| 欧美三日本三级少妇99| 欧美成人三级在线视频| 亚洲人性生活视频| 欧美一区二区成人| 日韩高清中文字幕一区二区| 色偷偷亚洲第一综合| 狠狠躁少妇一区二区三区| 伊人伊成久久人综合网站| 天堂av在线播放| palipali轻量版永久网页入口| 一区二区三区视频免费观看| 欧美午夜精品一区二区蜜桃| 伊人久久大香线蕉精品组织观看| 国内成+人亚洲| 亚洲男人av电影| 中文字幕一区二区日韩精品绯色| 精品电影在线| 午夜国产一区| 豆花视频一区二区| 亚洲在线黄色| 国产a级一级片| 91黄视频在线| 91看片就是不一样| 日韩中文字幕在线一区| 福利在线播放| 国产三级三级三级看三级| 91产国在线观看动作片喷水| 亚洲电影影音先锋| 国产专区欧美精品| 友田真希在线| 中文字幕日韩精品在线| 欧美动物xxx| 这里有精品可以观看| 亚洲深夜视频| 色欲av永久无码精品无码蜜桃| 久久久精品欧美丰满| 国产精品一区一区三区| 93在线视频精品免费观看| caopon在线免费视频| 国产丝袜在线精品| aa视频在线播放| 少妇精品久久久| 亚洲美女在线视频| 妞干网在线观看| 成人观看免费视频| 在线观看入口黄最新永久免费国产| 韩国中文字幕2020精品| 亚洲国产精品va在线观看黑人| 91系列在线观看| 日韩护士脚交太爽了| 成年人黄色大片在线| 色偷偷亚洲第一综合| 最近2019中文字幕mv免费看| 成人精品一区二区三区电影免费| 亚洲第一精品在线观看| 欧美性xxxx极品hd欧美风情| 视频在线亚洲| 日韩福利二区| 日韩一二三四区| 国产mv免费观看入口亚洲| jizz视频播放器| 免费看污污视频| 国产在线麻豆精品| 色播五月综合网| 二区三区不卡不卡视频| 欧美天堂社区| 欧美一区二区三区四区夜夜大片| 午夜国产欧美理论在线播放| 国产精品人人妻人人爽| 精品久久久久一区二区| 亚洲综合男人的天堂| 亚洲久久久久久| 在线成人小视频| 日本一区二区三区久久| 亚洲欧美日韩国产| 成年在线观看视频| 在线亚洲精品福利网址导航| 粉嫩av懂色av蜜臀av分享| 国产精品一线天粉嫩av| 91看片淫黄大片一级在线观看| 黄色录像特级片| 牛夜精品久久久久久久99黑人| 国产精品资源| 国产精品综合久久久久| jizzjizz丝袜老师| 亚洲欧美自拍偷拍| 五月婷婷另类国产| 亚洲国产成人在线观看| 精品国产高清a毛片无毒不卡| 欧美日韩不卡视频| 欧美性视频一区二区三区| 国产成年人免费视频| 捆绑调教日本一区二区三区| 石原莉奈在线亚洲三区| 91久久极品少妇xxxxⅹ软件| 99久久精品无码一区二区毛片| 一二三区在线播放| 国产精品一二三产区| 嫩草研究院在线| 操人视频91| 成人av在线一区二区三区| 成人国产一区二区三区精品麻豆| 男人资源网站| 亚洲跨种族黑人xxx| 亚洲电影先锋| 91免费综合在线| 九九热视频这里只有精品| 自拍偷拍免费精品| 日韩人妻一区二区三区蜜桃视频| 日本爱爱小视频| 国产不卡在线视频| 国产区成人精品视频| 亚洲国产乱码最新视频| 国产极品视频| 99久久精品免费看国产交换| 国偷自产av一区二区三区麻豆| 日本黄色成人|