YII中的setAttribute()函数不起作用

时间:2011-12-01 12:10:58

标签: yii

我正在使用PHP Yii Framework和MongoDB(yiimongodbsuite)。我创建了一个从EMongoDocument扩展的模型。

<?php

 class MyModel extends EMongoDocument
 {
     public $attr1;
     public $attr2;

     // rules, custom validations and other functions....

     public function setAttributes($values, $safeOnly=true)
     {
      if(!is_array($values))
        return;

      if($this->hasEmbeddedDocuments())
      {
        $attributes=array_flip($safeOnly ? $this->getSafeAttributeNames() : $this->attributeNames());

        foreach($this->embeddedDocuments() as $fieldName => $className)
            if(isset($values[$fieldName]) && isset($attributes[$fieldName]))
            {
                $this->$fieldName->setAttributes($values[$fieldName], $safeOnly);
                unset($values[$fieldName]);
            }
       }

    parent::setAttributes($values, $safeOnly);
    }
  }

在控制器中,

$dataModel = new MyModel();
$dataModel->setAttributes($_POST['MyModel']);
if($dataModel->validate()){
    $dataModel->save();
}

上面的代码没有设置属性值。 如果有任何错误,请告诉我。

2 个答案:

答案 0 :(得分:3)

您需要确保在每个级别使用“安全”验证规则。

要了解更多信息,请阅读此http://www.yiiframework.com/wiki/161/understanding-safe-validation-rules/

答案 1 :(得分:0)

尝试确定您有哪些验证错误:

if(!$model->validate()) {
    die( print_r($model->getErrors()) );
}