我有一个与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'),
);
}
实际上我错过了什么?