模型可能在多个 场景 下使用,例如 User
模块可能会在收集用户登录输入,也可能会在用户注册时使用。 在不同的场景下,模型可能会使用不同的业务规则和逻辑,例如email
属性在注册时强制要求有,但在登陆时不需要。
模型使用 yii\base\Model::scenario 属性保持使用场景的跟踪, 默认情况下,模型支持一个名为 default
的场景
public function rules(){
return [
['adminuser','required','message' => '用户名不能为空'],
//指定adminuser为login场景
['adminuser','validatePassword','on' =>'login'],
['adminpass','required','message' => '密码不能为空'],
['adminemail','required','message' => '邮箱不能为空'],
['adminemail','email','message'=>'邮箱格式不正确'],
];
}
设置场景字段
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['login'] = ['adminuser','adminpass'];
$scenarios['seekPassword'] = ['adminuser','adminemail'];
$scenarios['test'] = ['adminpass'];
return $scenarios;
}
rules验证
/***************************** rules验证规则函数 ****************************/
public function validatePassword(){
if(!$this->hasErrors()){
$data = self::find()->where('adminuser = :user and adminpass = :pass',[':user' => $this->adminuser,':pass' => md5($this->adminpass)])->one();
if (empty($data)){
$this->addError('用户名或者密码错误');
}
}
}