2016-05-05 9 views
0

複数のモデルを1つのフォームで作成したいと考えています。1つのモデルで複数のモデルを作成するYii2

これは私のコントローラである:

public function actionWorkRoom() { 
    $model = [new Moshtari()]; 
    $model[0] = new Moshtari(); 
    $model[1] = new Moshtari(); 
    if (Model::loadMultiple($model, Yii::$app->request->post()) && Model::validateMultiple($model)) { 
     foreach ($model as $m) { 
      $m->save(false); 
     }    
    } 
    return $this->render('_form_work_room', ['model' => $model]); 
} 

モデル:

class Moshtari extends \yii\db\ActiveRecord { 
     public function rules() { 
       return [ 
        [['CodeKargah'], 'number'], 
       ] 
     } 
     public function attributeLabels() { 
      return [ 
       'CodeKargah' => Yii::t('app', 'Code Kargah'), 
      ]; 
    } 

    } 

そして、これは、ビューに私のフォームです:

foreach ($model as $index => $m) { 
    echo $form->field($m, "[$index]CodeKargah"); 
} 

が、これはこのエラーを投げている:

Call to a member function getActiveValidators() on a non-object

+0

あなたの完全なエラーとどのようなコードの行が言及されているとは何ですか? – topher

+0

完全なエラーhttp://www.dsabz.com/view/files/q.PNG – Farshid

+0

'CodeKargah'のルールはありますか? – topher

答えて

0

私は、これは新しいコードで、解決:

コントローラー:

public function actionWorkRoom($member = 1) { 
    $model[] = new Moshtari(['scenario' => 'work_room_kargah']); 
    for ($i = 0; $i < $member; $i++) { 
     $model[] = new Moshtari(['scenario' => 'work_room']); 
    } 
    if (Model::loadMultiple($model, Yii::$app->request->post()) && Model::validateMultiple($model)) { 
     foreach ($model as $m) { 
      $m->time = Yii::$app->jdate->date('Y/m/d') . ' ' . date('H:i:s'); 
      $m->CodeKargah = $model[0]->CodeKargah; 
      $m->save(false); 
     } 
     return $this->redirect('index'); 
    } 

    return $this->render('_form_work_room', ['models' => $model]); 
} 

ビュー

foreach ($models as $index => $model) { 
    //print_r($model->getErrors()); 
    if ($index >= 1) { 
        <?= 
        $form->field($model, "[$index]name", [ 
         'template' => '<div class="row nomargin"><div class="col-md-4 form_label">{label}</div><div class="col-md-7">{input}{error}</div></div>'] 
        )->textInput(['maxlength' => true]) 
        ?> 
    } 
} 
関連する問題