Php 如何在yii 1中的表单之外验证我的表单

Php 如何在yii 1中的表单之外验证我的表单,php,forms,yii,Php,Forms,Yii,我正在尝试验证我的表单,但没有任何模型。我成功地做到了这一点,并且完成了70%。但是我被困在一个地方,所以我需要一点帮助。为此,我创建了一个custome类 class MyValidator extends CFormModel { public function __get($name) { return isset($_POST[$name])?$_POST[$name]:null; } static function myValidate( Ar

我正在尝试验证我的表单,但没有任何模型。我成功地做到了这一点,并且完成了70%。但是我被困在一个地方,所以我需要一点帮助。为此,我创建了一个custome类

class MyValidator extends CFormModel {
    public function __get($name) {
        return isset($_POST[$name])?$_POST[$name]:null;
    }

    static function myValidate( Array $rules ) {
        $dummy = new MyValidator();

        foreach($rules as $rule) {
            if( isset($rule[0],$rule[1]) ) {
                $validator = CValidator::createValidator( 
                     $rule[1], 
                     $dummy, 
                     $rule[0], 
                     array_slice($rule,2) 
                );
                $validator->validate($dummy);
            }
            else { /* throw error; */ }
        }
        return $dummy;
    }
}
现在我在控制器中使用这个类,就像

$model=MyValidator::myValidate($this->validConfiguration());
if(!$model->hasErrors())
{
    file_put_contents($config,$newconfig);
    $this->refresh();
}else
{
    $this->errors=$model->getErrors(); 
    print_r($this->errors);
    $data=(array) json_decode($newconfig);
}
有效配置
是一个包含规则的函数

public function validConfiguration()
{
    return array(
        array('guestuser[email], adminEmail, dateformat', 'required'),
        array('adminEmail, guestuser[email]', 'email'),
        );
}
我的表单字段如下

<div>
<?php echo CHtml::textField('adminEmail',isset($data['adminEmail']) ? $data['adminEmail']: '',array('class'=>'form-control')); ?>
<div class="errorMessage"><?php echo $this->displayerror('adminEmail'); ?></div>
</div>
<div>
<?php echo CHtml::textField('guestuser[email]',isset($data['guestuser']->email) ? $data['guestuser']->email: '',array('class'=>'form-control')); ?>
<div class="errorMessage"><?php echo $this->displayerror('guestuser[email]'); ?></div>
</div>

问题


该代码适用于单个元素,即
adminEmail
defaultpage
,但不适用于
guestuser[email]
guestuser[password]
,如下所示

您遗漏了“array('guestuser[email]、adminEmail、dateformat、'required')、@SardorDushamov,这在示例中是一个键入错误。