在Yii2中,动态表单是一种允许用户在运行时添加新字段的表单。当单击添加按钮时,Yii2动态表单不会自动添加新字段的原因可能是缺少相应的JavaScript代码或配置。
要解决这个问题,可以按照以下步骤进行操作:
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\bootstrap\Button;
use yii\web\JsExpression;
/* @var $this yii\web\View */
/* @var $model app\models\YourModel */
/* @var $form yii\widgets\ActiveForm */
$this->registerJsFile('@web/js/jquery.js', ['depends' => [\yii\web\JqueryAsset::class]]);
$this->registerJsFile('@web/js/yii.js', ['depends' => [\yii\web\JqueryAsset::class]]);
$this->registerJsFile('@web/js/yii.activeForm.js', ['depends' => [\yii\web\JqueryAsset::class]]);
<?php $form = ActiveForm::begin(['id' => 'dynamic-form']); ?>
<!-- 表单字段 -->
<div class="form-group">
<?= Html::button('添加字段', ['class' => 'btn btn-success', 'id' => 'add-field-button']) ?>
</div>
<?php ActiveForm::end(); ?>
<?php
$js = <<<JS
var index = 0;
$('#add-field-button').on('click', function() {
var template = '<div class="form-group">' +
'<label class="control-label">新字段</label>' +
'<input type="text" class="form-control" name="YourModel[newFields][' + index + ']" />' +
'</div>';
$('#dynamic-form').append(template);
index++;
});
JS;
$this->registerJs($js);
?>
在上述代码中,我们为添加按钮添加了一个点击事件,每次点击按钮时,会动态地添加一个新的输入字段。
public function actionCreate()
{
$model = new YourModel();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// 保存成功后的操作
return $this->redirect(['view', 'id' => $model->id]);
}
return $this->render('create', [
'model' => $model,
]);
}
在上述代码中,我们使用load()
方法将表单数据加载到模型中,并使用save()
方法将数据保存到数据库中。
通过以上步骤,当单击添加按钮时,Yii2动态表单将会动态地添加新字段,并将提交的数据保存到数据库中。
领取专属 10元无门槛券
手把手带您无忧上云