2011-07-02 1 views
3

새 멤버를 활성화하는 방법을 찾고 있습니다. ;Yii의 모델 속성에 배열 데이터 할당

$ 모델 -> 자명 = $ 데이터 [1] :

불확정 오프셋 : 1

오류가 포함 된 다음 라인에서 발생 I가 다음 오류

이 작품을 더 좋게 만드는 Yii 방법이 있습니까?

나는 신생아이며, OOP 및 Yii이므로 어떤 도움도 크게 받으실 수 있습니다!

이 메소드는 기본적으로 사용자로부터 get 요청을받습니다. get은이 메소드를 실행하고 계정의 유효성을 확인하는 데 사용되는 키를 포함합니다. 유효성 검증은 키와 동일한 이름의 파일에 저장됩니다. 파일 내부에는 날짜, 사용자 이름, 전자 메일, 소금 및 암호 해시가 포함 된 파이프 구분선이 있습니다. 파일을 읽고 파이프에서 데이터를 폭발시킨 후에 모델에 데이터를 할당해야합니다. 그러면 데이터가 db에 저장됩니다.

... 

     $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

실제로 $ 행의 파일에서 행을 가져오고 있습니까? fclose ($ fp) 다음에 if (empty ($ line))가 죽는 ('get not line') 것으로 확인할 수 있습니다. .. $ 행에 문제가있는 것 같아서 이것은 확실합니다. 또한 fread가 지정한만큼의 바이트, 즉 전체 파일을 읽으므로 while 루프가 중복됩니다. – Abhijit

+0

'print_r ($ data)'의 결과는 무엇입니까? 두 번째 배열 위치에 항상 무언가가 존재합니까? – ldg

+0

@ldg - print_r은 오류를 설명하는 Array ([0] =>)입니다. 이유는 무엇입니까? – Mark

답변

5

당신은 연관 배열을로드 할 CActiveRecord 클래스의 attributes 속성을 사용할 수 있습니다. 예를 들어

, 당신은 속성 foobar있는 모델이 있다고, 당신은 배열을 가지고 data('foo'=>1, 'bar'=2)

당신이 $myModel->attributes = data을 설정할 수 있으며,이 배열을 통해 루프 모델에 속성을 할당합니다 (만 해당 속성의 유효성 확인 규칙)

+0

+1, 감사합니다. $ model = new MyModel ($ dataArray); –

+0

배열 대신 배열 배열을 사용하면 이것이 효과가없는 것 같습니다. – MEM

+0

나는 Yii가 이것을 어떻게하는지 궁금해하고 있었다! 특히 Yii2에서'$ model-> attributes = $ _POST [ 'Formname'] '는 해당 모델 속성을 데이터로 채 웁니다. 현장 뒤에서 무슨 일이 벌어지고 있는지 아십니까? 배열의 모든 데이터가 해당 속성에로드되는 방식은 무엇입니까? –

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 다차원 array.They 키 $value의 ($ 키) $model->attributes과 동일하다.