2017 © Pedro Peláez
 

yii2-extension yii2-dynamicform

yii2-dynamicform

image

alex290/yii2-dynamicform

yii2-dynamicform

  • Friday, June 15, 2018
  • by alex290
  • Repository
  • 2 Watchers
  • 1 Stars
  • 15 Installations
  • JavaScript
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

yii2-dynamicform

Это исправленная и дополненная копия из wbranganca и для поддержки некоторых наших проектов, которые используют это расширение, (*1)

Installation

The preferred way to install this extension is through composer., (*2)

Either run, (*3)

php composer.phar require --prefer-dist alex290/yii2-dynamicform "*"

or add, (*4)

"alex290/yii2-dynamicform": "*"

to the require section of your composer.json file., (*5)

Demos

Usage

The View





'dynamic-form']); ?>
= $form->field($modelCustomer, 'first_name')->textInput(['maxlength' => true]) ?>
= $form->field($modelCustomer, 'last_name')->textInput(['maxlength' => true]) ?>

Addresses

'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 'widgetBody' => '.container-items', // required: css class selector 'widgetItem' => '.item', // required: css class 'limit' => 4, // the maximum times, an element can be cloned (default 999) 'min' => 1, // 0 or 1 (default 1) 'insertButton' => '.add-item', // css class 'deleteButton' => '.remove-item', // css class 'model' => $modelsAddress[0], 'formId' => 'dynamic-form', 'formFields' => [ 'full_name', 'address_line1', 'address_line2', 'city', 'state', 'postal_code', ], ]); ?>
$modelAddress): ?>

Address

isNewRecord) { echo Html::activeHiddenInput($modelAddress, "[{$i}]id"); } ?> = $form->field($modelAddress, "[{$i}]full_name")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]address_line1")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]address_line2")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]city")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]state")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]postal_code")->textInput(['maxlength' => true]) ?>
= Html::submitButton($modelAddress->isNewRecord ? 'Create' : 'Update', ['class' => 'btn btn-primary']) ?>

Javascript Events


$(".dynamicform_wrapper").on("beforeInsert", function(e, item) { console.log("beforeInsert"); }); $(".dynamicform_wrapper").on("afterInsert", function(e, item) { console.log("afterInsert"); }); $(".dynamicform_wrapper").on("beforeDelete", function(e, item) { if (! confirm("Are you sure you want to delete this item?")) { return false; } return true; }); $(".dynamicform_wrapper").on("afterDelete", function(e) { console.log("Deleted item!"); }); $(".dynamicform_wrapper").on("limitReached", function(e, item) { alert("Limit reached"); });

The Controller (sample code)

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

            $modelsAddress = DynamicModel::createMultiple(Address::classname());
            DynamicModel::loadMultiple($modelsAddress, Yii::$app->request->post());

            // ajax validation
            if (Yii::$app->request->isAjax) {
                Yii::$app->response->format = Response::FORMAT_JSON;
                return ArrayHelper::merge(
                    ActiveForm::validateMultiple($modelsAddress),
                    ActiveForm::validate($modelCustomer)
                );
            }

            // validate all models
            $valid = $modelCustomer->validate();
            $valid = DynamicModel::validateMultiple($modelsAddress) && $valid;
            
            if ($valid) {
                $transaction = \Yii::$app->db->beginTransaction();
                try {
                    if ($flag = $modelCustomer->save(false)) {
                        foreach ($modelsAddress as $modelAddress) {
                            $modelAddress->customer_id = $modelCustomer->id;
                            if (! ($flag = $modelAddress->save(false))) {
                                $transaction->rollBack();
                                break;
                            }
                        }
                    }
                    if ($flag) {
                        $transaction->commit();
                        return $this->redirect(['view', 'id' => $modelCustomer->id]);
                    }
                } catch (Exception $e) {
                    $transaction->rollBack();
                }
            }
        }

        return $this->render('create', [
            'modelCustomer' => $modelCustomer,
            'modelsAddress' => (empty($modelsAddress)) ? [new Address] : $modelsAddress
        ]);
    }

    /**
     * Updates an existing Customer model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     */
    public function actionUpdate($id)
    {
        $modelCustomer = $this->findModel($id);
        $modelsAddress = $modelCustomer->addresses;

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

            $oldIDs = ArrayHelper::map($modelsAddress, 'id', 'id');
            $modelsAddress = DynamicModel::createMultiple(Address::classname(), $modelsAddress);
            DynamicModel::loadMultiple($modelsAddress, Yii::$app->request->post());
            $deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsAddress, 'id', 'id')));

            // ajax validation
            if (Yii::$app->request->isAjax) {
                Yii::$app->response->format = Response::FORMAT_JSON;
                return ArrayHelper::merge(
                    ActiveForm::validateMultiple($modelsAddress),
                    ActiveForm::validate($modelCustomer)
                );
            }

            // validate all models
            $valid = $modelCustomer->validate();
            $valid = DynamicModel::validateMultiple($modelsAddress) && $valid;

            if ($valid) {
                $transaction = \Yii::$app->db->beginTransaction();
                try {
                    if ($flag = $modelCustomer->save(false)) {
                        if (! empty($deletedIDs)) {
                            Address::deleteAll(['id' => $deletedIDs]);
                        }
                        foreach ($modelsAddress as $modelAddress) {
                            $modelAddress->customer_id = $modelCustomer->id;
                            if (! ($flag = $modelAddress->save(false))) {
                                $transaction->rollBack();
                                break;
                            }
                        }
                    }
                    if ($flag) {
                        $transaction->commit();
                        return $this->redirect(['view', 'id' => $modelCustomer->id]);
                    }
                } catch (Exception $e) {
                    $transaction->rollBack();
                }
            }
        }

        return $this->render('update', [
            'modelCustomer' => $modelCustomer,
            'modelsAddress' => (empty($modelsAddress)) ? [new Address] : $modelsAddress
        ]);
    }

    ...
}
```




###To zero or more elements (use the following code in your view file)


```php





'dynamic-form']); ?>
= $form->field($modelCustomer, 'first_name')->textInput(['maxlength' => true]) ?>
= $form->field($modelCustomer, 'last_name')->textInput(['maxlength' => true]) ?>
'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 'widgetBody' => '.container-items', // required: css class selector 'widgetItem' => '.item', // required: css class 'limit' => 4, // 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' => $modelsAddress[0], 'formId' => 'dynamic-form', 'formFields' => [ 'full_name', 'address_line1', 'address_line2', 'city', 'state', 'postal_code', ], ]); ?>

Addresses

$modelAddress): ?>

Address

isNewRecord) { echo Html::activeHiddenInput($modelAddress, "[{$i}]id"); } ?> = $form->field($modelAddress, "[{$i}]full_name")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]address_line1")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]address_line2")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]city")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]state")->textInput(['maxlength' => true]) ?>
= $form->field($modelAddress, "[{$i}]postal_code")->textInput(['maxlength' => true]) ?>
= Html::submitButton($modelAddress->isNewRecord ? 'Create' : 'Update', ['class' => 'btn btn-primary']) ?>

The Versions

15/06 2018

dev-master

9999999-dev

yii2-dynamicform

  Sources   Download

MIT

The Requires

 

by WebGoal

extension yii2

15/06 2018

0.0.1

0.0.1.0

yii2-dynamicform

  Sources   Download

MIT

The Requires

 

by WebGoal

extension yii2

15/06 2018

0.0.2

0.0.2.0

yii2-dynamicform

  Sources   Download

MIT

The Requires

 

by WebGoal

extension yii2