来自PHPSAPCE
关于YII
的验证规则,在YIIguide
中的创建模型中已经有表述了。其中一种方式就是根据不同的场景来设置不同的规则。比如在登录和注册的时候都要用到User
这个模型,但是登录与注册所要求的规则不一样,这个时候就可以使用场景来设置不同的规则了:
<?php
class User extends CActiveRecord {
public static function model($className = __CLASS__) {
return parent::model($className);
}
public function tableName() {
return '{{user}}';
}
public function rules() {
return array(
array('username,password,email','required',
'message'=>'这些属性不能为空','on'=>'register'),
array('email,password','required',
'message'=>'这些属性不能为空','on'=>'login')
);
}
}
?>
也就是在on的后面跟上一个场景名。比如如上代码的register
和login
。当然也可以在同一个规则中设置多个场景:
array('tagname', 'checktagname', 'on'=>'create,update')
在UserController
中需要使用如下的函数:
$model->setScenario('register');
参数为场景名。
<?php
class UserController extends Controller {
public function actionRegister() {
$model = new User();
$model->setScenario('register');
if (isset($_POST['User'])) {
$model->attributes = $_POST['User'];
}
$model->validate();
//code...
$this->render('index', array(
'model' => $model
));
}
public function actionLogin() {
$model = new User();
$model->setScenario('login');
if (isset($_POST['User'])) {
$model->attributes = $_POST['User'];
}
$model->validate();
//code...
$this->render('index', array(
'model' => $model
));
}
}
?>
这样就能根据不同的场景来设置规则了。就不需为登录和注册单独建立Model
了(比如LoginForm
和RegisterForm
)。
on
属性来自CValidator
,一条验证规则的第三个及以后的参数就是所对应的验证类的参数。