Yii场景不适用于模块验证

时间:2014-11-07 10:45:44

标签: php yii

我在模块中使用了以下规则:

array('password', 'required','on'=>'insert,userchangepassword'),
array('password', 'compare', 'compareAttribute'=>'cpassword','on'=>'userchangepassword'),
array('cpassword', 'required','on'=>'userchangepassword'),
  

这里我想使用userchangepassword方案

     

它不会触发userchangepassword操作

这是我的控制器:

$model=new Users('userchangepassword');
if(isset($_POST["Users"]))
{
    //print_r($_POST["Users"]);exit;
    $q = 'UPDATE users SET password = "'.$_POST['Users']["password"].'" 
            where id = "'.Yii::app()->user->getId().'"';
    $cmd = Yii::app()->db->createCommand($q);
    $cmd->execute();
    $this->redirect(array('users/useraccount'));
}

$this->render('userrest',array(
    'model'=>$model,
));

1 个答案:

答案 0 :(得分:2)

您需要为模型的属性指定值,并调用validate来验证用户输入。

$model = new Users( 'userchangepassword' );

请注意,只有当您的模型是CFormModel的后代时,您才能在构造函数中传递当前场景。否则,您需要明确调用setScenario

$model = new Users();
$model->setScenario( 'userchangepassword' );

if( isset( $_POST["Users"] ) ) {
    $model->setAttributes( $_POST["Users"] );
    if ( $model->validate() ) {
        // do something
    }
}