0

我正在使用变量来填充模型中的公共函数 rules(),当表单字段为空时(即使它被标记为必需),CActiveForm 内部的验证错误(在视图中调用)不会触发。

A)这是按要求显示的,但不验证(我需要它来验证)

array_push($required,'email');
array_push($rules,array(implode(',',$required), 'required'));
return $rules;

B)这是按要求显示的,并且确实验证(确切地说它应该如何工作)

array_push($rules,array('email', 'required'));
return $rules;

如何让示例 A 像示例 B 一样进行验证?(两个示例输出相同。)

更新:下面是整个函数,例如 A。(不验证。)

public function rules()
{

    $required = array();
    $rules = array();

    $model=self::getFields();

    foreach ($model as $field) {
       $field_rule = array();
       if ($field->REQUIRED=='1'){
          array_push($required,$field->VARNAME);
          //print_r($field->VARNAME); //outputs: email
       }
       if ($field->FIELD_TYPE=='VARCHAR'||$field->FIELD_TYPE=='TEXT') {
          $field_rule = array($field->VARNAME, 'length', 'max'=>$field->FIELD_SIZE, 'min' => $field->FIELD_SIZE_MIN);
          array_push($rules,$field_rule);   
        }
    }
    array_push($rules,array(implode(',',$required), 'required'));
    return $rules;
}

public static function getFields() {
    $form_id=Yii::app()->params['form-id'];
    $model=FormField::model()->findAllByAttributes(array('FORM_ID'=>$form_id), array('order'=>'POSITION ASC'));
    return $model;
}

下面是规则函数,例如 B。(验证。)

public function rules()
{
    $required = array();
    $rules = array();

    array_push($rules,array('email', 'required'));

    $field_rule = array('email', 'length', 'max'=>'255', 'min'=>'0');
    array_push($rules,$field_rule);

    return $rules;
}

当我 print_r($rules) 在上述函数中返回之前,我最终得到相同的输出数组:

Array ( [0] => Array ( [0] => email [1] => length [max] => 255 [min] => 0 ) [1] => Array ( [0] => email [1] => required ) )

我希望这是一个简单的 PHP 错误,但这让我相信这是一个 Yii 问题。

4

0 回答 0