0

我有一个与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'),
        );
    }

实际上我错过了什么?

4

1 回答 1

2

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

于 2013-09-04T05:02:51.677 回答