Присвоение данных массива свойствам модели в Yii - PullRequest
4 голосов
/ 02 июля 2011

Я работаю над методом активации новых участников. Я получаю следующую ошибку:

Неопределенное смещение: 1

Ошибка возникает в строке, содержащей следующее:

$ модели-> имя пользователя = $ данных [1];

Есть ли способ Yii сделать эту работу лучше?

Я новичок с php, oop и Yii, поэтому любая помощь будет принята с благодарностью!

Метод в основном принимает запрос на получение от пользователя. Get запускает этот метод и содержит ключ, который используется для проверки их учетной записи. Проверки хранятся в файле с тем же именем, что и ключ. Внутри файла находится строка с разделителем канала, которая содержит дату, имя пользователя, адрес электронной почты, соль и хэш пароля. После прочтения файла и взрыва данных в канале мне нужно присвоить данные модели, а затем они будут сохранены в БД.

...

        $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 ]

4 голосов
/ 05 июля 2011

Вы можете использовать свойство attributes класса CActiveRecord для загрузки ассоциативного массива.

Например, скажем, у вас есть модель со свойствами foo и bar, а у вас есть массив data('foo'=>1, 'bar'=2)

вы можете установить $myModel->attributes = data, и он будет циклически проходить по массиву и назначать свойства модели (но только если эти атрибуты имеют проверка правила)

0 голосов
/ 10 февраля 2017

У меня была похожая проблема, особенно при использовании массива массива.Вот как я это решил.

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 - это многомерный массив. Их ключи ($ key) $value такие же, как $model->attributes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...