Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii方案在模块验证中不起作用_Php_Yii - Fatal编程技术网

Php Yii方案在模块验证中不起作用

Php Yii方案在模块验证中不起作用,php,yii,Php,Yii,我在模块中使用了以下规则: array('password', 'required','on'=>'insert,userchangepassword'), array('password', 'compare', 'compareAttribute'=>'cpassword','on'=>'userchangepassword'), array('cpassword', 'required','on'=>'userchangepassword'), 这里我想使用use

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

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,
));

您需要为模型的属性分配值,并调用
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
    }
}

@pritinarang,对,这意味着你的验证失败了。根据您的描述,您提交给控制器的值并不明显。你可以使用var_dump($_POST[“Users”])吗?值在POST方法中,它仍然向我显示所需的值数组(大小=2)'password'=>string'123'(长度=3)'cpassword'=>string'123'(长度=3)@pritinarang,刚刚意识到'require'实际上是一个安全的验证规则。您确定您的模型扩展了CFormModel而不是CModel吗?正如@Valentin所说:
validate()
是一个CModel函数。因此,您必须直接使用
$model->validate()
或调用
validate()
$model->save()