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これを回避するには、3 番目の引数として渡します。

于 2013-09-04T05:02:51.677 に答える