Yii2.0 場景的使用

原文鏈接:http://www.yiichina.com/tutorial/89

最近在學習Yii2.0,第一次聽見場景的時候,很是迷茫不知道要怎麼用,後來百度了一把,看了幾篇別人寫的文章,基本算是瞭解了其用法,就把大神的文章轉了一份(有微改),如下:
舉個簡單的例子,現在在 post表裏面有 title ,image ,content 三個的字段,當我創建一個 post 的時候,我想三個字段全部是必填項,但是你修改的時候,title content 兩個字段是必填的, image可以不填寫。正常的情況下,
[[‘title’, ‘content’, ‘image’], ‘required’,], 但是我們更改的時候 只需要 [[‘title’, ‘content’], ‘required’], 就可以了,但是少了 image 字段 我們的表單就無法提交,這種問題怎麼辦啊?? 場景可以幫你解決這種問題,下面是一個簡單的場景實例。
1.首先我們在 model 裏面定義一下場景 類名必須是 scenarios()

public function scenarios() { 
    return [ 
            'create' => ['title', 'image', 'content'], 
            'update' => ['title', 'content'], 
         ]; 
}

2.如上所示,場景的基本設置我們就已經完成一部分了,下面我們設置 rules() ,調用場景我們用 on 關鍵字,on 指定的就是場景,一個場景用字符串,多個場景用數組

 public function rules()
    {
        [['title', 'content'], 'required', 'on' => ['create', 'update']],
         [['image'], 'required', 'on' => 'create'],
        [['image'], 'image', 'enableClientValidation' => true, 'maxSize' => 1024, 'message' => '您上傳的文件過 大', 'on' => ['create']], 
   }

3.這樣就算設置完成了,就在控制器Controller中開始調用吧

 第一種:
 $model = $this->findModel($id);
 $model->setScenario('update'); 或者
 $model->scenario = 'update';
 第二種:
 $model = new Customer(['scenario' => 'create']);

這樣就可以了。

在正式的項目中,我還沒有運用過,以後有了實際的運用,再分享出來!

發佈了23 篇原創文章 · 獲贊 21 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章