Yii2 Dynamic Data is not loading on all DepDrop in dynamic field

Viewed 103

I'm trying to create a dynamic form for one of my projects. I used wbraganca's Dynamic From to achieve this. In my dynamic form I have a DepDrop to show subcategories list from a parent category.
My _form.php

<?php $form = ActiveForm::begin(['id' => 'dynamic-form']); ?>
<div class="row">
    <div class="col-md-6">
        <?= $form->field($model, 'rq_job_no')->textInput() ?>
    </div>
    <div class="col-md-6">
        <?= $form->field($model, 'rq_req_date')->widget(\yii\jui\DatePicker::class, [
            //'language' => 'ru',
            'dateFormat' => 'php:Y-m-d',
            'clientOptions' => [
                'changeMonth' => true,
                'changeYear' => true,
                'showButtonPanel' => true,
                'yearRange' => '1990:2030',
                'minDate' => date('Y-m-d'),
            ],
            'options' => ['class' => 'form-control', 'readOnly' => true, 'placeholder' => 'Enter the Item Required Date'],
        ]) ?>
    </div>
    <div class="col-md-6">
        <?= $form->field($model, 'rq_priority_type')->dropDownList(['urgent' => 'Urgent', 'normal' => 'Normal'], ['prompt' => '--Select Priority Type--']) ?>
    </div>
    <div class="col-md-6">
    </div>
    <div class="col-md-6">
        <?= $form->field($model, 'rq_approval_type')->dropDownList([1 => ' Approved Vendor Needed', 2 => 'Approved Submitted Needed', 3 => 'Warranty Certificate to be Collected', 4 => 'Long Lead Material',], ['prompt' => '--Select Type of Approval--']) ?>
        <?php echo $form->field($model, 'rq_cat_type')->widget(Select2::class, [
            'data' => $catData,
            'options' => ['placeholder' => '--Select Request Type--', 'class' => 'form-control'],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]);
        ?>
    </div>
    <div class="col-md-12">
        <?= $form->field($model, 'rq_remarks')->textarea(['rows' => 6]) ?>
    </div>
</div>

<!-- code for dynamic form -->
<div class="panel panel-default">
    <div class="panel-heading">
        <h4><i class="glyphicon glyphicon-envelope"></i> Request Items</h4>
    </div>
    <div class="panel-body">
        <?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' => 10, // 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' => [
                'item_name',
                'item_qty',
                'item_unit',
            ],
        ]); ?>

        <div class="container-items">
            <!-- widgetContainer -->
            <?php foreach ($modelsAddress as $i => $modelAddress) : ?>
                <div class="item panel panel-default">
                    <!-- widgetBody -->
                    <div class="panel-heading">

                        <h4 class="panel-title pull-left">Items</h4>

                        <div class="pull-right">
                            <button type="button" class="add-item btn btn-success btn-xs"><i class="fa fa-plus"></i></button>
                            <button type="button" class="remove-item btn btn-danger btn-xs"><i class="fa fa-minus"></i></button>
                        </div>
                        <div class="clearfix"></div>
                    </div>
                    <div class="panel-body">
                        <?php
                        // necessary for update action.
                        if (!$modelAddress->isNewRecord) {
                            echo Html::activeHiddenInput($modelAddress, "[{$i}]rt_id");
                        }
                        ?>
                        <?php //$form->field($modelAddress, "[{$i}]rt_item")->textInput(['maxlength' => true]) ?>
                        <?= $form->field($modelAddress, "[{$i}]rt_item")->widget(DepDrop::class, [
                            'options' => ['id' => 'reqitems-'.$i.'-rt_item'],
                            'pluginOptions' => [
                                'depends' => ['requests-rq_cat_type'],
                                'placeholder' => '--Select Location--',
                                'url' => Url::to(['/requests/subcat'])
                            ]
                        ]); ?>
                        <div class="row">
                            <div class="col-sm-6">
                                <?= $form->field($modelAddress, "[{$i}]rt_qty")->textInput(['maxlength' => true]) ?>
                            </div>
                            <div class="col-sm-6">
                                <?= $form->field($modelAddress, "[{$i}]rt_unit")->textInput(['maxlength' => true]) ?>
                            </div>
                        </div><!-- .row -->
                    </div>
                </div>
            <?php endforeach; ?>

        </div>
        <?php DynamicFormWidget::end(); ?>
    </div>
</div>





<div class="form-group">
    <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>

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

My Controller action to load the subcategory

 public function actionSubcat()
    {
        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $out = [];
        if (isset($_POST['depdrop_parents'])) {
            $parents = $_POST['depdrop_parents'];
            if ($parents != null) {
                $cat_id = $parents[0];
                $out = self::getSubCatList($cat_id);
                return ['output' => $out, 'selected' => ''];
            }
        }
        return ['output' => 'No Category Available', 'selected' => ''];
    }
    public function getSubCatList($cat_id)
    {
        $output = [];
        $category = Item::find()->where(['item_category' => $cat_id])->orderBy('item_title')->all();
        if (empty($category)) {
            $output[] = ['id' => '0', 'name' => 'No Category Available'];
        } else {
            foreach ($category as $cat) {
                $output[] = ['id' => $cat->item_id, 'name' => $cat->item_title];
            }
        }
        return $output;
    }    

enter image description here

My problem is that DepDrop is only loading the subcategory for the first loop of the dynamic form and leaves the rest loop blank. Attached screenshot for your reference.
Can anyone help by pointing what I am missing or how can I achieve my requirement.

0 Answers
Related