2011-07-02 14 views
3

私は新しいメンバーをアクティブにするメソッドに取り組んでいます。 ;Yiiのモデルプロパティへの配列データの割り当て

$モデル - >ユーザ名= $データ[1]:

未定義オフセット:1

エラーは以下が含まれる行で発生し、私は次のエラーを取得します

この作業を改善するためのYii方法はありますか?

私はphp、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

$ lineのファイルから実際に行を取得していますか? fclose($ fp)の後にif(空($ line))が死んでいる( '行が出ない')ことを確認できます。 $ lineに問題があるように見えるだけです。 freadは指定したバイト数、つまりファイル全体を読み込むので、whileループも冗長です。 – Abhijit

+0

'print_r($ data)'の出力は何ですか?あなたは常に2番目の配列位置に何かがあると確信していますか? – 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$valueの多次元array.Theyキー($キー)である$model->attributesと同じです。

関連する問題