yii2-dynamicform
yii2-dynamicform copied to clipboard
I need create two dynamicform in the seame view
Hi i need some help, i hace un model with two realtionship and i need y de same vew use two dimanic form for each relashion, how can i do that, thanks
My problem is creatin the acction in the controller
please do you find solution? i'm in the same case
please do you find solution? i'm in the same case
Yes i did it
please can you share with me?
please can you share with me?
Can i doit tomorrow? Today im not in my work?
of course it's not urgent. thank you
This is my code Controller:
public function actionCreate()
{
$model = new Solicitudes();
$modelsCarpetas = [new CarpetasSolicitudes];
$modelsAplicaciones = [new AplicacionesSolicitudes];
$model->creada = time();
$model->actualizada = time();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$modelsCarpetas = Model::createMultiple(CarpetasSolicitudes::classname());
Model::loadMultiple($modelsCarpetas, Yii::$app->request->post());
$modelsAplicaciones = Model::createMultiple(AplicacionesSolicitudes::className());
Model::loadMultiple($modelsAplicaciones, Yii::$app->request->post());
// validate all models
$valid = $model->validate();
$valid = Model::validateMultiple($modelsCarpetas) && $valid;
//$valid = Model::validateMultiple($modelsAplicaciones) && $valid;
if ($valid) {
Yii::$app->session->setFlash('success', 'La solicitud ha sido guardada con éxito');
}
if ($valid) {
$transaction = \Yii::$app->db->beginTransaction();
try {
if ($flag = $model->save(false)) {
foreach ($modelsCarpetas as $modelsCarpeta) {
$modelsCarpeta->solicitud = $model->id;
if (! ($flag = $modelsCarpeta->save(false))) {
$transaction->rollBack();
break;
}
}
}
if ($flag = $model->save(false)) {
foreach ($modelsAplicaciones as $modelAplicacion) {
$modelAplicacion->solicitud = $model->id;
if (! ($flag = $modelAplicacion->save(false))) {
$transaction->rollBack();
break;
}
}
}
if ($flag) {
$transaction->commit();
return $this->redirect(['view', 'id' => $model->id]);
}
} catch (Exception $e) {
$transaction->rollBack();
}
}
} else {
return $this->render('create', [
'model' => $model,
'modelsCarpetas' => (empty($modelsCarpetas)) ? [new CarpetasSolicitudes] : $modelsCarpetas,
'modelsAplicaciones' => (empty($modelsAplicaciones)) ? [new AplicacionesSolicitudes] : $modelsAplicaciones
]);
}
}
Views: (Two div whit the forms) --- Sorry for my english
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
'widgetBody' => '.container-items', // required: css class selector
'widgetItem' => '.item', // required: css class
'limit' => app\models\CarpetasCompartidas::find()->count(), // the maximum times, an element can be added (default 999)
'min' => 0, // 0 or 1 (default 1)
'insertButton' => '.add-item', // css class
'deleteButton' => '.remove-item', // css class
'model' => $modelsCarpetas[0],
'formId' => 'dynamic-form',
'formFields' => [
'carpeta',
'motivo',
'leer',
'escribir',
'eliminar',
],
]); ?>
<div class="box box-primary">
<div class="box-header">
<h4>
<i class="fa fa-folder-open"></i> Carpetas compartidas
<button type="button" class="add-item btn btn-success btn-flat btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Adicionar</button>
</h4>
</div>
<div class="box-body">
<div class="container-items"><!-- widgetBody -->
<?php foreach ($modelsCarpetas as $i => $modelCarpeta): ?>
<div class="item box box-default"><!-- widgetItem -->
<div class="box-header">
<h3 class="box-title pull-left">Carpeta</h3>
<div class="pull-right">
<button type="button" class="remove-item btn btn-danger btn-flat btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
</div>
<div class="clearfix"></div>
</div>
<div class="box-body">
<?php
// necessary for update action.
if (! $modelCarpeta->isNewRecord) {
echo Html::activeHiddenInput($modelCarpeta, "[{$i}]id");
}
?>
<div class="row">
<div class="col-sm-6">
<?= $form->field($modelCarpeta, "[{$i}]motivo")->textInput(['maxlength' => 64]) ?>
</div>
<div class="col-sm-6">
<?= $form->field($modelCarpeta, "[{$i}]carpeta")->dropDownlist(ArrayHelper::map(app\models\CarpetasCompartidas::find()->all(), 'id', 'nombre'),['prompt'=>'']) ?>
</div>
</div><!-- .row -->
<div class="row">
<div class="col-sm-4">
<?= $form->field($modelCarpeta, "[{$i}]leer")->checkBox() ?>
</div>
<div class="col-sm-4">
<?= $form->field($modelCarpeta, "[{$i}]escribir")->checkBox() ?>
</div>
<div class="col-sm-4">
<?= $form->field($modelCarpeta, "[{$i}]eliminar")->checkBox()?>
</div>
</div><!-- .row -->
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div><!-- .panel -->
<?php DynamicFormWidget::end(); ?>
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
'widgetBody' => '.container-items-2', // required: css class selector
'widgetItem' => '.item-2', // required: css class
'limit' => 10, // the maximum times, an element can be added (default 999)
'min' => 0, // 0 or 1 (default 1)
'insertButton' => '.add-item-2', // css class
'deleteButton' => '.remove-item-2', // css class
'model' => $modelsAplicaciones[0],
'formId' => 'dynamic-form',
'formFields' => [
'aplicacion',
'modulo',
'motivos',
],
]); ?>
<div class="box box-primary">
<div class="box-header">
<h4>
<i class="fa fa-folder-open"></i> Aplicaciones y sistemas
<button type="button" class="add-item-2 btn btn-flat btn-success btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Adicionar</button>
</h4>
</div>
<div class="box-body">
<div class="container-items-2"><!-- widgetBody -->
<?php foreach ($modelsAplicaciones as $i => $modelAplicacion): ?>
<div class="item-2 box box-default"><!-- widgetItem -->
<div class="box-header">
<h3 class="box-title-title pull-left">Aplicación</h3>
<div class="pull-right">
<button type="button" class="remove-item-2 btn btn-flat btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
</div>
<div class="clearfix"></div>
</div>
<div class="box-body">
<?php
// necessary for update action.
if (! $modelAplicacion->isNewRecord) {
echo Html::activeHiddenInput($modelAplicacion, "[{$i}]id");
}
?>
<div class="row">
<div class="col-sm-6">
<?= $form->field($modelAplicacion, "[{$i}]motivos")->textInput(['maxlength' => 64]) ?>
</div>
<div class="col-sm-6">
<?= $form->field($modelAplicacion, "[{$i}]aplicacion")->dropDownlist(ArrayHelper::map(app\models\Aplicaciones::find()->all(), 'id', 'sistemas'),['prompt'=>'']) ?>
</div>
<div class="col-sm-6">
<?= $form->field($modelAplicacion, "[{$i}]tipo_acceso")->dropDownlist(['TOTAL'=>'TOTAL','LIMITADO'=>'LIMITADO'],['prompt'=>'']); ?>
</div>
<div class="col-sm-6">
<?= $form->field($modelAplicacion, "[{$i}]modulo")->textInput(['maxlength' => 64]) ?>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div><!-- .panel -->
<?php DynamicFormWidget::end(); ?>
This is my code Controller:
public function actionCreate() { $model = new Solicitudes(); $modelsCarpetas = [new CarpetasSolicitudes]; $modelsAplicaciones = [new AplicacionesSolicitudes]; $model->creada = time(); $model->actualizada = time(); if ($model->load(Yii::$app->request->post()) && $model->save()) { $modelsCarpetas = Model::createMultiple(CarpetasSolicitudes::classname()); Model::loadMultiple($modelsCarpetas, Yii::$app->request->post()); $modelsAplicaciones = Model::createMultiple(AplicacionesSolicitudes::className()); Model::loadMultiple($modelsAplicaciones, Yii::$app->request->post()); // validate all models $valid = $model->validate(); $valid = Model::validateMultiple($modelsCarpetas) && $valid; //$valid = Model::validateMultiple($modelsAplicaciones) && $valid; if ($valid) { Yii::$app->session->setFlash('success', 'La solicitud ha sido guardada con éxito'); } if ($valid) { $transaction = \Yii::$app->db->beginTransaction(); try { if ($flag = $model->save(false)) { foreach ($modelsCarpetas as $modelsCarpeta) { $modelsCarpeta->solicitud = $model->id; if (! ($flag = $modelsCarpeta->save(false))) { $transaction->rollBack(); break; } } } if ($flag = $model->save(false)) { foreach ($modelsAplicaciones as $modelAplicacion) { $modelAplicacion->solicitud = $model->id; if (! ($flag = $modelAplicacion->save(false))) { $transaction->rollBack(); break; } } } if ($flag) { $transaction->commit(); return $this->redirect(['view', 'id' => $model->id]); } } catch (Exception $e) { $transaction->rollBack(); } } } else { return $this->render('create', [ 'model' => $model, 'modelsCarpetas' => (empty($modelsCarpetas)) ? [new CarpetasSolicitudes] : $modelsCarpetas, 'modelsAplicaciones' => (empty($modelsAplicaciones)) ? [new AplicacionesSolicitudes] : $modelsAplicaciones ]); } }
Views: (Two div whit the forms) --- Sorry for my english
<?php DynamicFormWidget::begin([ 'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 'widgetBody' => '.container-items', // required: css class selector 'widgetItem' => '.item', // required: css class 'limit' => app\models\CarpetasCompartidas::find()->count(), // the maximum times, an element can be added (default 999) 'min' => 0, // 0 or 1 (default 1) 'insertButton' => '.add-item', // css class 'deleteButton' => '.remove-item', // css class 'model' => $modelsCarpetas[0], 'formId' => 'dynamic-form', 'formFields' => [ 'carpeta', 'motivo', 'leer', 'escribir', 'eliminar', ], ]); ?> <div class="box box-primary"> <div class="box-header"> <h4> <i class="fa fa-folder-open"></i> Carpetas compartidas <button type="button" class="add-item btn btn-success btn-flat btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Adicionar</button> </h4> </div> <div class="box-body"> <div class="container-items"><!-- widgetBody --> <?php foreach ($modelsCarpetas as $i => $modelCarpeta): ?> <div class="item box box-default"><!-- widgetItem --> <div class="box-header"> <h3 class="box-title pull-left">Carpeta</h3> <div class="pull-right"> <button type="button" class="remove-item btn btn-danger btn-flat btn-xs"><i class="glyphicon glyphicon-minus"></i></button> </div> <div class="clearfix"></div> </div> <div class="box-body"> <?php // necessary for update action. if (! $modelCarpeta->isNewRecord) { echo Html::activeHiddenInput($modelCarpeta, "[{$i}]id"); } ?> <div class="row"> <div class="col-sm-6"> <?= $form->field($modelCarpeta, "[{$i}]motivo")->textInput(['maxlength' => 64]) ?> </div> <div class="col-sm-6"> <?= $form->field($modelCarpeta, "[{$i}]carpeta")->dropDownlist(ArrayHelper::map(app\models\CarpetasCompartidas::find()->all(), 'id', 'nombre'),['prompt'=>'']) ?> </div> </div><!-- .row --> <div class="row"> <div class="col-sm-4"> <?= $form->field($modelCarpeta, "[{$i}]leer")->checkBox() ?> </div> <div class="col-sm-4"> <?= $form->field($modelCarpeta, "[{$i}]escribir")->checkBox() ?> </div> <div class="col-sm-4"> <?= $form->field($modelCarpeta, "[{$i}]eliminar")->checkBox()?> </div> </div><!-- .row --> </div> </div> <?php endforeach; ?> </div> </div> </div><!-- .panel --> <?php DynamicFormWidget::end(); ?> <?php DynamicFormWidget::begin([ 'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 'widgetBody' => '.container-items-2', // required: css class selector 'widgetItem' => '.item-2', // required: css class 'limit' => 10, // the maximum times, an element can be added (default 999) 'min' => 0, // 0 or 1 (default 1) 'insertButton' => '.add-item-2', // css class 'deleteButton' => '.remove-item-2', // css class 'model' => $modelsAplicaciones[0], 'formId' => 'dynamic-form', 'formFields' => [ 'aplicacion', 'modulo', 'motivos', ], ]); ?> <div class="box box-primary"> <div class="box-header"> <h4> <i class="fa fa-folder-open"></i> Aplicaciones y sistemas <button type="button" class="add-item-2 btn btn-flat btn-success btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Adicionar</button> </h4> </div> <div class="box-body"> <div class="container-items-2"><!-- widgetBody --> <?php foreach ($modelsAplicaciones as $i => $modelAplicacion): ?> <div class="item-2 box box-default"><!-- widgetItem --> <div class="box-header"> <h3 class="box-title-title pull-left">Aplicación</h3> <div class="pull-right"> <button type="button" class="remove-item-2 btn btn-flat btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button> </div> <div class="clearfix"></div> </div> <div class="box-body"> <?php // necessary for update action. if (! $modelAplicacion->isNewRecord) { echo Html::activeHiddenInput($modelAplicacion, "[{$i}]id"); } ?> <div class="row"> <div class="col-sm-6"> <?= $form->field($modelAplicacion, "[{$i}]motivos")->textInput(['maxlength' => 64]) ?> </div> <div class="col-sm-6"> <?= $form->field($modelAplicacion, "[{$i}]aplicacion")->dropDownlist(ArrayHelper::map(app\models\Aplicaciones::find()->all(), 'id', 'sistemas'),['prompt'=>'']) ?> </div> <div class="col-sm-6"> <?= $form->field($modelAplicacion, "[{$i}]tipo_acceso")->dropDownlist(['TOTAL'=>'TOTAL','LIMITADO'=>'LIMITADO'],['prompt'=>'']); ?> </div> <div class="col-sm-6"> <?= $form->field($modelAplicacion, "[{$i}]modulo")->textInput(['maxlength' => 64]) ?> </div> </div> </div> </div> <?php endforeach; ?> </div> </div> </div><!-- .panel --> <?php DynamicFormWidget::end(); ?>
Hi, I have 2 questions:
- Why do you use the same wrapper class for both widgets?
- How did you write JS events for 2 widgets?
Because i have two models to manipulate, and the JS eventes i helped whit the docs of the extension
sir gvalman. I created 2 dynamic form and i add textinput for amount, It is possible to sum all amount of 2 dynamic form?