我遇到与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'),
);
}
实际上我错过了什么?
答案 0 :(得分:2)
默认情况下,CActiveForm::validate($model)
从$_POST
加载模型属性并覆盖当前属性值,从而销毁转换后的值。将false
作为第三个参数来避免这种情况。