需求描述
有个mobile字段,想只修改这个字段的时候验证为必填,创建的时候不是必填项
场景配置
我们的场景就命名为editmobile吧
public function scenarios(){ return [ 'editmobile' => ['mobile'], ];}
修改rules
public function rules(){ return [ [['company', 'email'], 'string', 'max' => 60], [['company', 'city'], 'required'], [['mobile'], 'required',"on"=>["editmobile"]], ];}
使用场景
$model = Info::find()->where(['t_id'=> $id])->one();$model->setScenario('editmobile'); //or $model->scenario = 'editmobile';$model->load(Yii::$app->request->post());if($model->save){ //todo}
遇到的问题
起作用了
但是使用create的时候,保存却出了问题,提示unknown scenarios:default解决方法
后来找文章,是因为设置场景的时候,直接把父类的场景覆盖了。所以应该这样写scenarios
public function scenarios(){ $scenarios = parent::scenarios(); $scenarios['editmobile'] = ['mobile']; return $scenarios;}
这样就ok了。
参考文章: