我正在开发一种激活新成员的方法。我收到以下错误:
未定义的偏移量: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.');
}
...
答案 0 :(得分:4)
您可以使用attributes
类的CActiveRecord
属性来加载关联数组。
例如,假设您有一个包含属性foo
和bar
的模型,并且您有一个数组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
相同。