如何更新yii2中的动态字段
我想在不使用任何库的情况下使用jquery创建动态字段。我在表单中有两个字段,但有一个字段如何更新yii2中的动态字段,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我想在不使用任何库的情况下使用jquery创建动态字段。我在表单中有两个字段,但有一个字段label我想创建多个时间,这实际上是一个问题选项,可以是多个时间 在下面的form.php中,您可以看到我多次使用jquery创建的标签字段。我可以保存它们,但我不知道如何显示那些在更新案例中多次出现的字段。真对不起我的英语 控制器 public function actionCreate() { $model = new QuestionsOptions(); if ($
label
我想创建多个时间,这实际上是一个问题选项,可以是多个时间
在下面的form.php中,您可以看到我多次使用jquery创建的标签字段。我可以保存它们,但我不知道如何显示那些在更新案例中多次出现的字段。真对不起我的英语
控制器
public function actionCreate()
{
$model = new QuestionsOptions();
if ($model->load(Yii::$app->request->post())) {
if(sizeof(array_filter($_POST['QuestionsOptions']['label'])) > 0){
foreach($_POST['QuestionsOptions']['label'] as $key => $row){
$model->setIsNewRecord(true);
$model->option_id = null;
$model->label = $row;
$model->save();
}
}
// exit;
return $this->redirect(['view', 'id' => $model->option_id]);
} else {
return $this->renderAjax('create', [
'model' => $model,
]);
}
}
模型
form.php
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<div class="surveys-questions-form">
<?php $form = ActiveForm::begin(); ?>
<?php
if(isset($_GET['option_id']) and $_GET['option_id'] > 0)
$id= $_GET['option_id'];
else
$id= $model->option_id;
echo $form->field($model, 'question_id')->hiddenInput(['value' => $id])->label(false);
?>
<div class="col-md-6">
<div id="question_wrapper">
<?= $form->field($model, 'type')->dropDownList([ 'text' => 'Text', 'numbers' => 'Numbers', 'date' => 'Date', 'texarea' => 'Texarea', 'checkbox' => 'Checkbox', 'radio' => 'Radio', 'rating' => 'Rating', ], ['prompt' => '']) ?>
<div id="add_more_field">
<?= $form->field($model, 'label[]')->textInput(['maxlength' => true]) ?>
</div>
<div class="form-group">
<?php
echo Html::a('Add more', 'javascript:void(0);', [
'id' => 'surveys-questions-new-button',
'class' => 'pull-right btn btn-primary btn-xs'
])
?>
</div>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
<?php
$script = <<< JS
$(document).ready(function(){
$('#surveys-questions-new-button').on('click', function () {
$("#add_more_field").clone().appendTo("#question_wrapper");
});
});
JS;
$this->registerJs($script);
?>
也许我的代码中还有其他不正确的地方,请建议我,我真的需要帮助。我对改进和修改您的代码没有什么意见:
创建可加载动态添加的选项/标签的问题选项表单
。使用此模型迭代选项(可以从请求或数据库加载)。不要使用像$\u GET['option\u id']
这样的语句(尤其是在视图中)
在表单上添加新选项(动态)时,请为字段名添加整数索引。例如标签[45]
。我通常使用带有替换项的特殊html模板。使用此方法而不是克隆现有行。例如:
<div class="js-new-option-template">
<input type="text" name="option[{{OPTION_ID}}][label]"/>
<input type="hidden" name="option[{{OPTION_ID}}][is_new_option]"/>
</div>
如有必要,您可以从DB选项中删除已在表单上删除的选项
我可以给你一些建议,但在那之后,你的验证将不起作用……谢谢you@IStranger. 我还没有得到$modelpoption=$isNewModel?新问题选项():问题选项::findOne($optionId);还有一件事,如果你把js代码,它将是最好的。当你有时间的时候
<div class="js-new-option-template">
<input type="text" name="option[{{OPTION_ID}}][label]"/>
<input type="hidden" name="option[{{OPTION_ID}}][is_new_option]"/>
</div>
// ...
foreach ($modelForm->options as $optionId => $optionData) {
// Prepare data
$isNewModel = \yii\helpers\ArrayHelper::getValue($optionData, 'is_new_option', true);
$optionLabel = \yii\helpers\ArrayHelper::getValue($optionData, 'label');
$optionQuestion = \yii\helpers\ArrayHelper::getValue($optionData, 'question_id');
// Create or find options model
$modelOption = $isNewModel
? new QuestionsOptions()
: QuestionsOptions::findOne($optionId);
if (!$modelOption) {
throw new \yii\web\NotFoundHttpException('Cannot be found option record with the id = ' . $optionId);
}
// Populate and save model
$modelOption->label = $optionLabel;
$modelOption->question_id = $optionQuestion; // foreign key
if (!$modelOption->save()) {
throw new \yii\base\Exception('Cannot be saved new option record.');
}
}