将数组数据分配给Yii中的模型属性

时间:2011-07-02 18:59:54

标签: php yii

我正在开发一种激活新成员的方法。我收到以下错误:

未定义的偏移量:1

错误发生在包含以下内容的行上:

$模型 - >用户名= $数据[1];

有没有Yii方法让这项工作更好?

我是php,oop和Yii的新手,所以任何帮助都会受到极大的赞赏!

该方法基本上接受来自用户的get请求。 get运行此方法并包含用于验证其帐户的密钥。验证存储在与密钥同名的文件中。文件内部是一个以管道分隔的行,其中包含日期,用户名,电子邮件,salt和密码哈希。在读取文件并在管道中爆炸数据后,我需要将数据分配给模型,然后将其保存到数据库中。

...

        $model=new Users;

        $model->activation_key=$_GET['key'];

        $path_to_validation_files = Yii::app()->basePath."/data/new_member_validations";
        $validation_file = $path_to_validation_files . "/".$model->activation_key.".dat";

        if(is_readable($validation_file) && !empty($validation_file))
        {
            if($fp = fopen($validation_file, 'r'))
            {
                while(!feof($fp))
                {
                    $line = fread($fp, filesize($validation_file));
                }
                fclose($fp);
                $data = explode('|', $line);

                if(!empty($data)){
                    $model->username=$data[1];
                    $model->email=$data[2];
                    $model->salt=$data[3];
                    $model->password=$data[4];
                } else {
                    throw new CHttpException(500,'Validation file contained no data.');
                }

            } else {
                throw new CHttpException(500,'Cannot open validation file.');
            }
        } else {
            throw new CHttpException(404,'Validation file not found, not readable, or empty.');
        }


...

2 个答案:

答案 0 :(得分:4)

您可以使用attributes类的CActiveRecord属性来加载关联数组。

例如,假设您有一个包含属性foobar的模型,并且您有一个数组data('foo'=>1, 'bar'=2)

您可以设置$myModel->attributes = data,它会遍历数组并将属性分配给模型(但仅当这些属性具有验证规则时)

答案 1 :(得分:0)

我遇到了类似的问题,特别是在使用数组数组时。这就是我解决它的方式。

public function epidemicSelectInsertParticipant($class){
    $data=  Participant::findAll(['class'=>$class]);
    if($data){
        foreach ($data as $value) {
            $model = new Epidemicparticipant;
            foreach ($value as $key => $val) {
                if($key=='id'){

                }else{
                        $model->$key = $val;
                }
            }
           $model->save(false);
        }
        return TRUE;
    }  else {
      return false;  
    }
}

在我的情况下,$data是一个多维数组。$value的键($ key)与$model->attributes相同。