5

需求描述

有个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了。
参考文章:https://segmentfault.com/q/10...


zebrayoung
240 声望35 粉丝

引用和评论

0 条评论