Yii2中如何使用scenario場景,使rules按不同運用進行字段驗證
當創建news新聞form表單時:
添加新聞的時候執行create動作。
必填字段:title-標題,picture-圖片,description-描述。 這時候在model里News.php下rules規則這樣定義:
public function rules(){return [[['title', 'description', 'picture', ], 'required',], ];}
但是更改的時候 只需要 [[‘title’, ‘description’], ‘required’], 就可以了, 少了 image 字段 表單就無法提交,這個問題如果解決呢?
那scenario場景就可以上場了
可以在app\models\News.php定義一個場景代碼如下(也可以不定義):
public function scenarios(){return ['create'=>['title','description','picture'],'update'=>['title','description'],];}
注意:
如果在模型中定義了public function scenarios(),那么之后對該模型只能設置自定義的這些scenario名稱(該案例只能使用model->scenario = ‘create’、model->scenario = ‘update’);
如果沒有在模型中定義public function scenarios(),只需on數據有相關scenario名稱即可命中規則(此時model->scenario 可設置成任意想要的場景名稱),為了簡便,我一般不設置;
修改rules規則:
public function rules(){return [[['title', 'description', ], 'required','on'=>['create','update'],'message'=>'不能為空'],[['picture'], 'required', 'on' => 'create'],];}
在create動作下添加:
$model->scenario = 'create';
在update動作下添加:
$model->scenario = 'update';