【Yii】Validation scenarios

  在一个web应用中,可能有多个地方需要进行验证。比如“注册"时username、email、password这三项必须要填写,但是在“找回密码”时,可能只有email需要。所以,在Yii框架中,如果将这三项都设置为"required"那肯定是不可取的。

  最好的解决办法莫过于建立不同的验证场景,通过"on"将一个场景与相应的规则相关联。来看一个User Model中rules()的例子:

public function rules() {
    return array(
        //Set required fields
         //Applies to 'register' scenario
         //Note 'on' property
        array('username, password, password_repeat, email', 'required', 'on' => 'register'),
 
        //Applies to 'recover' scenario
        array('email', 'required', 'on' => 'recover'),
 
        //Applies to all scenarios
        array('username, password', 'length', 'max'=>35, 'min'=>3),
 
        //This rule checks if the username is unique in the database in
        //the 'register' scenario (we don't want it to check for uniqueness
        //on the login page for instance)
        array('username', 'unique', 'on' => 'register'),
 
        //This rule applies to 'register' and 'update' scenarios
        //Compares 'password' field to 'password_repeat' to make sure they are the same
        array('password', 'compare', 'on' => 'register, update'),
    );
}

  通过注释我们能很好地理解这样定义的好处。现在我们可以通过调用CModel::validate()方法来为不同的场景进行验证:

if ($user->validate('register')) {
    $user->save(false);
}

 

 

 

   

posted @ 2012-05-18 14:05  hi_bazinga  阅读(785)  评论(0编辑  收藏  举报