为什么我在使用Yii CActiveForm :: validate()与数组时收到错误消息

时间:2013-09-04 03:43:55

标签: ajax yii

我遇到与CActiveForm::validate()相关的问题。我有一个表单,并使用Ajax将数据发送到数据库,我的表单包含一个多选的下拉列表。在控制器的数据保存部分,最初产生了以下错误

mb_strlen() expects parameter 1 to be string, array given (.../framework/validators/CStringValidator.php:84)

并且在将框架更新到更新版本之后,该错误消失了,并获得了以下验证消息。

Category Ids is invalid.

如果表单已完全填写(我的意思是模型中的所有规则都已满足),则不会产生任何此类错误或错误消息。

控制器动作

public function actionCompany() {
        $model = new Company;
        if (isset($_POST['Company'])) {
            $model->attributes = $_POST['Company'];
            $category_ids = "";
            if (is_array($_POST['Company']['category_ids']))
                $category_ids = implode(',', $_POST['Company']['category_ids']);
            $model->category_ids = $category_ids;
            if ($model->validate()) {
                /*$temp = Company::model()->findByPK($model->id);
                if ($temp !== null) {
                    $model = $temp;
                }*/
                $model->save();
                echo CJSON::encode(array('status' => 'success'));
                Yii::app()->end();
            } else {
                $error = CActiveForm::validate($model);
                if ($error != '[]')
                    echo $error;
            }
        }
    }

模型规则

public function rules()
    {

        return array(
            array('...., category_ids,...', 'required'),
            array('..., category_ids, ...', 'length', 'max'=>255),
            ....
            .....
            array('...., category_ids,...', 'safe', 'on'=>'search'),
        );
    }

实际上我错过了什么?

1 个答案:

答案 0 :(得分:2)

默认情况下,CActiveForm::validate($model)$_POST加载模型属性并覆盖当前属性值,从而销毁转换后的值。将false作为第三个参数来避免这种情况。