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

Ajax 为什么在将Yii CActiveForm::validate()与数组一起使用时收到错误消息,ajax,yii,Ajax,Yii,我遇到了一个与CActiveForm::validate()相关的问题。我有一个表单,使用Ajax将数据发送到数据库,我的表单包含一个多个可选下拉列表。在控制器的数据保存部分,最初产生以下错误 mb_strlen() expects parameter 1 to be string, array given (.../framework/validators/CStringValidator.php:84) 在将框架更新到新版本后,错误消失了,取而代之的是下面的验证消息 Category Id

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

实际上我缺少什么?

默认情况下,从
$\u POST
加载模型属性并覆盖当前属性值,从而销毁转换后的值。将
false
作为第三个参数传递以避免此问题。

1)模型的
rules()
方法是什么样的?2) 在一个DB列中存储多个值是非常糟糕的设计,将来会给您带来很多问题。1.更新了我的问题。2.但我不想在这种情况下存储类别需要不同的表,如果我这样做的话;这将导致一个表包含大量记录,重复公司id?我不确定。。感觉这很好吗?我不确定我是否理解你目前的问题。如果您正确填写表单,则不会出现错误,如果您填写错误,则会收到错误消息。。。问题出在哪里?一个字段中的多个记录对于非哑存储之外的任何东西都是非常糟糕的-首先,您无法有效地搜索与特定类别关联的公司,或者加入类别表并用公司信息预加载类别。解决了这个问题。默认情况下,从
$\u POST
加载模型属性并覆盖当前属性值,从而破坏您的工作。将
false
作为第三个参数传递以避免此问题。