Yii2 несколько экземпляров одной модели -Error Вызов функции-члена formName () в массиве - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь создать форму, включающую несколько экземпляров на одной модели. Здесь PollResult, который является ответом одного пользователя на опрос. Я использую индексированный массив PollResults и пытаюсь использовать его в своей форме, но это приводит к ошибке Вызов функции-члена formName () в массиве. Ошибка возникает в первом поле формы и, вероятно, в других полях.

 public function actionAnswer($id) 
 {
      $user_id=$username = Yii::$app->user->identity->id;
      $model=new Survey();
      $polls=Poll::find()->where(['survey_id'=>$id])->all();
      $count=Poll::find()->where(['survey_id'=>$id])->count();
       echo('count is : '.$count);

      $pollResults=[];
      foreach ($polls as $poll) {
            $pollResult=PollResult::find()->where(['poll_id'=>$poll->id])->one();
            if(!$pollResult){
                 $pollResult=new PollResult();
                 $pollResult->poll_id=$poll->id;
                 $pollResult->user_id=$user_id;
            }
            $pollResults['nb_'.$poll->id]=$pollResult;//on utilise le poll_id pour identifier les pollResults dans le formulaire
      }  

      if (Model::loadMultiple($pollResults, Yii::$app->request->post()) && Model::validateMultiple($pollResults)) {
           foreach ($pollResults as $pollResult) {
                $pollResult->save();
           }
           return $this->redirect(['answer','id'=>$id]);
      }
      return $this->render('answer',[
           'model'=>$model,
           'pollResults' => $pollResults
       ]);
 }

    <?= $this->render('_form', ['model' => $model,   'pollResults'=>$pollResults]); ?>

_form.php
<div class="survey-form">

<?php $form = ActiveForm::begin([
    'enableClientValidation' => false, 
]); ?>
<fieldset>
 <?php
      foreach($pollResults as $key => $pollResult){
           //on crée une array associative clé = id de la réponse, valeur = texte de la réponse — ceci pour les questions à choix multiples
          $answers=Answer::find()->where(['poll_id'=>$pollResults[$key]->poll_id])->all();
          $poll=Poll::find()->where(['id'=>$pollResult->poll_id])->one();

 ?>
  <?php
         echo $form->field($pollResults,'[$key]user_id')->hiddenInput(['value' => Yii::$app->user->identity->id])->label(false); 

        echo $form->field($pollResults,'[$key]poll_id')->hiddenInput(['value' => $poll->id])->label(false); 

        $selected=$pollResults[$key]->answer_ids;
        $pollResults[$key]->answer_ids=$selected;
        $items=[];
        foreach($answers as $ans){
               $items[$ans->id]=$ans->answer_text;
         }

         switch  ($poll->allow_multiple) {//0 multiple answer in list, 1 only one answer, 2 textual answer
              case 0:
                  echo $form->field($pollResults,'[$key]answer_ids')->checkboxList($items,['separator' => '<br>'])->label(false);
                  break;
              case 1:
                   echo $form->field($pollResults,'[$key]answer_ids')->RadioList($items,['separator' => '<br>'])->label(false);
                   break;
             case 2: 
                     echo $form->field($pollResults,'[$key]answer_ids')->textarea(['rows' => 3])->label(' Saisissez votre réponse ici');
                    break;

         }   
        echo('<hr/>');

      }
   ?> 
</fieldset>

<?= Html::submitButton('Save'); ?>
<?php ActiveForm::end(); ?>

1 Ответ

1 голос
/ 22 октября 2019

Я думаю, что есть проблема с использованием переменной $ pollResult и $ key .

<?php 

  foreach($pollResults as $key => $pollResult){
      //wrong way          
      echo $form->field($pollResults,'[$key]user_id')->hiddenInput([])->label(false); 

      //right way
      echo $form->field($pollResult,"[$key]user_id")->hiddenInput()->label(false);
  }

?>
...