2017-05-11 1 views
1

übergeben Ich habe diese Art von Problem. Ich habe einen Eingabetext, der eine Radiovorlage enthält.yii2 Wert von Sicht zu Controller

Das Problem ist, dass ich den Wert des Radios erhalten möchte, wenn ich es überprüfe und es in das Datenbankfeld speichere.

Meine Idee ist es, eine Variable aus dem Modell zu erstellen, aber ich kann den Radio-Wert nicht an diese Variable übergeben, wenn ich sie speichere.

bitte helfen Sie mir, ich bin dabei fest.

hier die Bilder von Ansicht:

Generated view

Controller-Aktion:

public function actionCreate() 
    { 
     $model = new QbQuestion(); 

     if ($model->load(Yii::$app->request->post())) { 
      $answer = $model->answer; 
      $model->$answer; 
      $model->save(); 
      return $this->redirect(Url::to(['qb-question/index'])); 
     } else { 
      return $this->renderAjax('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 

Ausblick:

<div class="qb-question-form"> 

    <?php $form = ActiveForm::begin([ 
    'layout' => 'horizontal', 
    'fieldConfig' => [ 
     'horizontalCssClasses' => [ 
      'label' => 'col-sm-4', 
      'offset' => 'col-sm-offset-4', 
      'wrapper' => 'col-sm-8', 
      'button' => 'col-sm-8', 
      'error' => '', 
      'hint' => '', 
     ], 
    ], 
]); ?> 

    <?php echo $form->errorSummary($model); ?> 

    <?= $form->field($model, 'q_cat')->dropDownList(
      ArrayHelper::map(QbCategory::find()->all(), 'id', 'category'), 
      [ 
      'prompt' => 'Select Category' 
    ]) ?> 

    <?= $form->field($model, 'q_date')->dropDownList(
      ArrayHelper::map(QbDate::find()->asArray()->all(), 'id', 
       function($model, $defaultValue) { 
       return $model['month'].' '.$model['year']; 
      }), 
      [ 
      'prompt' => 'Select Date' 
    ]) ?> 

    <?php echo $form->field($model, 'question')->textarea(['rows' => 5]) ?> 

    <?= $form->field($model, 'q_c1', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      Html::radio('answer').'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c2', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      Html::radio('answer').'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c3', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      Html::radio('answer').'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c4', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      Html::radio('answer').'</span>{input}</div>', 
    ]); ?> 

     <?php echo Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 


    <?php ActiveForm::end(); ?> 

</div> 

Dank im Voraus.

+0

Könnten Sie bitte Ihren Code schreiben, nicht nur ein Bild davon? Und das Bild wäre besser in die Frage eingefügt! Es macht die Dinge lesbarer! Thnks –

+0

Entschuldigung im neuen zu dieser site.my Code ist das selbe auf diesem Bild. Ich habe versucht, vom Controller zu erstellen, um es zu speichern, aber es hat nicht funktioniert. Mein Controller-Code sieht so aus: öffentliche Funktion actionCreate() { $ model = new QbQuestion(); if ($ model-> load (Yii :: $ app-> Anfrage-> Post())) { $ answer = $ model-> answer; $ modell -> $ antwort; $ model-> save(); return $ this-> Umleitung (Url :: to (['qb-question/index']))); } else { Rückgabe $ this-> renderAjax ('create', [ 'Modell' => $ Modell, ]); } } – top

+0

Großartig! Jetzt müssen Sie nur den Code kopieren und einfügen, den Sie im Bild haben, das Bit, das mit '$ form-> field' beginnt. –

Antwort

1

Funkfeld, das Sie haben, wird immer 1 zurückgeben, so dass Sie die ausgewählte Antwort nicht identifizieren können.Sie können es normal html tun, wie unten:

Veränderung in Ihrem Formular-Datei:

<?= $form->field($model, 'q_c1', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
     '<input type="radio" name="QbQuestion[answer]" value="q_c1">'.'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c2', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      '<input type="radio" name="QbQuestion[answer]" value="q_c2">'.'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c3', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      '<input type="radio" name="QbQuestion[answer]" value="q_c3">'.'</span>{input}</div>', 
    ]); ?> 

    <?= $form->field($model, 'q_c4', [ 
     'inputTemplate' => '<div class="input-group"><span class="input-group-addon">'. 
      '<input type="radio" name="QbQuestion[answer]" value="q_c4">'.'</span>{input}</div>', 
    ]); ?> 

Hier QbQuestion['answer'] Rückkehr Sie die Antwort an.

Änderung Controller:

public function actionCreate() 
    { 
     $model = new QbQuestion(); 

     if ($model->load(Yii::$app->request->post())) { 

      // if you have answer attribute in model class than load that attribute 
      // no need of this line $answer = $model->answer; 
      // no need of this line $model->$answer; 

      // you can do it manually as below 
      $model->answer=$_REQEST['QbQuestion']['answer']; 

      $model->save(); 
      return $this->redirect(Url::to(['qb-question/index'])); 
     } else { 
      return $this->renderAjax('create', [ 
       'model' => $model, 
      ]); 
     } 
    } 
+0

Sie sind ein Lebensretter Herr :) das ist, was ich will^_ ^. vielen Dank – top

+0

@ Joe Miller danke zu Sir :) – top

+0

Sir können Sie mir helfen, dieses Problem zu bekommen out: [click me] (http://stackoverflow.com/questions/43927919/yii2-get -name-statt-von-id) danke :) – top

0

Der Grund dafür, dass Ihre Attribute nicht gespeichert werden, liegt darin, dass Sie das Feld nicht an das Modell gebunden haben. Daher werden falsche Feldnamen im Formular übermittelt.

Es scheint mir, als ob Sie eine radioList benötigen. Die Methode Html::radio() fügt nur eine Optionsschaltfläche hinzu, die an kein Modell gebunden ist. Um ein radioList zu verwenden, müssen Sie etwas wie dieses tun;

Zuerst erstellen Sie ein Array von möglichen Antworten in Ihrer Ansichtsdatei;

$answers = array('q_c1' => $model->q_c1, 'q_c2' => $model=>q_c2, 'q_c3' => $model=>q_c3, 'q_c4' => $model=>q_c4); 

Nun, da es eine Radio-Liste ist, wird es nur Daten für einen der Radio-Button senden. Es wird nicht möglich sein, mehrere Optionsfelder auszuwählen. Aufgrund der Art und Weise, wie Sie Ihre Daten speichern, benötigen Sie ein temporäres Modellattribut, um diesen Wert zu speichern, während das Modell ausgefüllt und validiert wird. Erstellen Sie dies in Ihrem Modell so;

public $answerToQuestion; 

Und lassen Sie es massiv zugeordnet werden;

public function rules() { 
    return [ 
     [['answerToQuestion'], 'safe] 
    ]; 
} 

Jetzt können Sie Ihr Formularfeld wie folgt erstellen;

echo $ form-> Feld ($ model, 'answerToQuestion') -> radioList ($ Antworten);

Yii sollte jetzt die Liste der Optionsfelder mit den richtigen Namen generieren, um sie an Ihr Modell zu binden und ihnen eine massive Zuweisung zu ermöglichen.

Question[answerToQuestion] => 'q_c2' 

Es Validierung vergeht Es ist nun schon mit Logik zu Ihrem Modell der gewählten Antwort in die jeweiligen zu entschlüsseln;

Die von der Form vorgelegt Attribute des Formulars sein (vorausgesetzt, wird Ihr Modell Question genannt. Felder in Ihrer Datenbank

+0

danke für Ihre Antwort. Ich verstehe was sie meinen. aber als mein Entwurf muss ich wie das Bild der Ansicht tun, die ich bekanntgab. können Sie mir helfen eine andere Lösung gebunden mein Radio zu meinem Modell mit dieser Linie zu machen: Feld ($ Modell, 'q_c1', [ 'inputTemplate' => '

'. Html::radio('answer').'{input}
', ]); ?> danke. – top

+0

sogar nur um zu identifizieren, wenn ich einen der Knöpfe überprüft habe. zum Beispiel, wenn ich Knopf in q_c1 überprüfte, dann kann ich sehen, dass q_c1 Knopf ausgewählt wurde. Auf diese Weise kann ich eine Bedingung in Controller erstellen :) danke. – top

+0

Dann müssen Sie das Feld so ändern; 'Html :: radio ('ModelName [' answer ']), vorausgesetzt, Sie haben ein Attribut namens antwort in Ihrem Modell, aber ich denke immer noch nicht, dass es das erreichen wird, was Sie wollen. Sie können jetzt die Radioknöpfe noch ein bisschen wie Sie ursprünglich stylen? –

Verwandte Themen