Undefined variable ERROR

Hellow, I beg for you help on how i can solve this errors… i need to implement nesteted dynamic form on my project but i get some errors on my codes and i dont know how to solve it coz i’m biginner in yii2.

ERROS I GET
undefined variable: model on create.php file

ERROS IN CONTROLLER
undefined class ‘Model’
Undefined variable ‘$indexWilaya’

on update part in contorller
-Undefined variable ‘$modelsWilaya’
-Undefined variable ‘$katas’

Unhandled exceptions on delete part on controller

ON VIEW MKOA FORM
Undefined variable ‘$modelsWilaya’

MY DATA BASE
my database

MKOA FORM CODE

<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use wbraganca\dynamicform\DynamicFormWidget;
?>

<div class="mkoa-form">
    <?php $form = ActiveForm::begin(['id' => 'dynamic-form']); ?>
    <div class="row">
        <div class="col-sm-6">
            <?= $form->field($model, 'MKOA')->textInput(['maxlength' => true]) ?>
    </div>
    <div class="padding-v-md">
        <div class="line line-dashed"></div>
    </div>
    <?php DynamicFormWidget::begin([
        'widgetContainer' => 'dynamicform_wrapper',
        'widgetBody' => '.container-items',
        'widgetItem' => '.wilaya-item',
        'limit' => 10,
        'min' => 1,
        'insertButton' => '.add-wilaya',
        'deleteButton' => '.remove-wilaya',
        'model' => $modelsWilaya[0],
        'formId' => 'dynamic-form',
        'formFields' => [
            'WILAYA',
        ],
    ]); ?>

    <table class="table table-bordered table-striped">
        <thead>
        <tr>
            <th>Wilaya</th>
            <th style="width: 450px;">Rooms</th>
            <th class="text-center" style="width: 90px;">
                <button type="button" class="add-house btn btn-success btn-xs"><span class="fa fa-plus"></span></button>
            </th>
        </tr>
        </thead>
        <tbody class="container-items">
        <?php foreach ($modelsWilaya as $indexWilaya => $modelWilaya): ?>
            <tr class="wilaya-item">
                <td class="vcenter">
                    <?php
                    // necessary for update action.
                    if (! $modelWilaya->isNewRecord) {
                        echo Html::activeHiddenInput($modelWilaya, "[{$indexWilaya}]id");
                    }
                    ?>
                    <?= $form->field($modelWilaya, "[{$indexWilaya}]WILAYA")->label(false)->textInput(['maxlength' => true]) ?>
                </td>
                <td>
                    <?= $this->render('_form-kata', [
                        'form' => $form,
                        'indexWilaya' => $indexWilaya,
                        'modelsKata' => $modelsKata[$indexWilaya],
                    ]) ?>
                </td>
                <td class="text-center vcenter" style="width: 90px; verti">
                    <button type="button" class="remove-house btn btn-danger btn-xs"><span class="fa fa-minus"></span></button>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <?php DynamicFormWidget::end(); ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>
</div>

KATA FORM CODE

<?php
use yii\helpers\Html;
use wbraganca\dynamicform\DynamicFormWidget;
?>

<?php DynamicFormWidget::begin([
    'widgetContainer' => 'dynamicform_inner',
    'widgetBody' => '.container-kata',
    'widgetItem' => '.kata-item',
    'limit' => 10,
    'min' => 1,
    'insertButton' => '.add-kata',
    'deleteButton' => '.remove-kata',
    'model' => $modelsKata[0],
    'formId' => 'dynamic-form',
    'formFields' => [
        'KATA'
    ],
]); ?>
    <table class="table table-bordered">
        <thead>
        <tr>
            <th>Kata</th>
            <th class="text-center">
                <button type="button" class="add-room btn btn-success btn-xs"><span class="glyphicon glyphicon-plus"></span></button>
            </th>
        </tr>
        </thead>
        <tbody class="container-rooms">
        <?php foreach ($modelsKata as $indexKata => $modelKata): ?>
            <tr class="kata-item">
                <td class="vcenter">
                    <?php
                    // necessary for update action.
                    if (! $modelKata->isNewRecord) {
                        echo Html::activeHiddenInput($modelKata, "[{$indexWilaya}][{$indexKata}]id");
                    }
                    ?>
                    <?= $form->field($modelKata, "[{$indexWilaya}][{$indexKata}]KATA")->label(false)->textInput(['maxlength' => true]) ?>
                </td>
                <td class="text-center vcenter" style="width: 90px;">
                    <button type="button" class="remove-kata btn btn-danger btn-xs"><span class="glyphicon glyphicon-minus"></span></button>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
<?php DynamicFormWidget::end(); ?>

MKOA CONTOLLER CODE

    <?php
namespace backend\controllers;

use Yii;
use yii\db\Exception;
use yii\helpers\ArrayHelper;
use yii\web\NotFoundHttpException;
use yii\widgets\ActiveForm;
use common\models\Mkoa;
use common\models\Wilaya;
use common\models\kata;

class MkoaController extends \yii\web\Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }

    /**
     * Displays a single mkoa model.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException
     */
    public function actionView($id)
{

    $model = $this->findModel($id);
    $wilaya = $model->Wilaya;

    return $this->render('view', [
        'model' => $model,
        'wilaya' => $wilaya,
    ]);
}

/**
 * Creates a new Mkoa model.
 * If creation is successful, the browser will be redirected to the 'view' page.
 * @return mixed
 */

public function actionCreate()
{
    $modelMkoa = new Mkoa;
    $modelsWilaya = [new Wilaya];
    $modelsKata = [[new Kata]];

    if ($modelMkoa->load(Yii::$app->request->post())) {
        
        $modelsWilaya = Model::createMultiple(Wilaya::classname());
        Model::loadMultiple($modelsWilaya, Yii::$app->request->post());

        // validate mkoa and wilaya models
        $valid = $modelMkoa->validate();
        $valid = Model::validateMultiple($modelsWilaya) && $valid;

        if (isset($_POST['KATA'][0][0])) {
            foreach ($_POST['KATA'] as $indexHouse => $katas) {
                foreach ($katas as $indexKata => $kata) {
                    $data['Kata'] = $kata;
                    $modelKata = new Kata;
                    $modelKata->load($data);
                    $modelsKata[$indexWilaya][$indexKata] = $modelKata;
                    $valid = $modelKata->validate();
                }
            }
        }
        if ($valid) {
            $transaction = Yii::$app->db->beginTransaction();
            try {
                if ($flag = $modelMkoa->save(false)) {
                    foreach ($modelsWilaya as $indexWilaya => $modelWilaya) {
                        if ($flag === false) {
                            break;
                        }
                        $modelWilaya->wilaya_M_id = $modelMkoa->id;
                        if (!($flag = $modelWilaya->save(false))) {
                            break;
                        }
                        if (isset($modelsKata[$indexWilaya]) && is_array($modelsKata[$indexWilaya])) {
                            foreach ($modelsKata[$indexWilaya] as $indexKata => $modelKata) {
                                $modelKata->wilaya_W_ID_id = $modelWilaya->id;
                                if (!($flag = $modelKata->save(false))) {
                                    break;
                                }
                            }
                        }
                    }
                }
                if ($flag) {
                    $transaction->commit();
                    return $this->redirect(['view', 'id' => $modelMkoa->id]);
                } else {
                    $transaction->rollBack();
                }
            } catch (Exception $e) {
                $transaction->rollBack();
            }
        }
    }
    return $this->render('create', [
        'modelMkoa' => $modelMkoa,
        'modelsWilaya' => (empty($modelsWilaya)) ? [new Wilaya] : $modelsWilaya,
        'modelsKata' => (empty($modelsKata)) ? [[new kata]] : $modelsKata,
    ]);
}
    /**
     * Updates an existing mkoa model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException
     */

    public function actionUpdate($id)
{
    $modelMkoa = $this->findModel($id);
    $modelsWilaya = $modelsWilaya->wilaya;
    $modelsKata = [];
    $oldKatas = [];

    if (!empty($modelsWilaya)) {
        foreach ($modelsWilaya as $indexWilaya => $modelWilaya) {
            $rooms = $modelWilaya->katas;
            $modelsKata[$indexWilaya] = $katas;
            $oldKatas = ArrayHelper::merge(ArrayHelper::index($katas, 'id'), $oldKatas);
        }
    }
    if ($modelMkoa->load(Yii::$app->request->post())) {
        // reset
        $modelsKata = [];
        $oldWilayaIDs = ArrayHelper::map($modelsWilaya, 'id', 'id');
        $modelsWilaya = Model::createMultiple(Wilaya::classname(), $modelsWilaya);
        Model::loadMultiple($modelsWilaya, Yii::$app->request->post());
        $deletedWilayaIDs = array_diff($oldWilayaIDs, array_filter(ArrayHelper::map($modelsWilaya, 'id', 'id')));

        // validate person and houses models
        $valid = $modelMkoa->validate();
        $valid = Model::validateMultiple($modelsWilaya) && $valid;
        $katasIDs = [];
        if (isset($_POST['KATA'][0][0])) {
            foreach ($_POST['KATA'] as $indexWilaya => $katas) {
                $katasIDs = ArrayHelper::merge($katasIDs, array_filter(ArrayHelper::getColumn($katas, 'KATA_ID')));
                foreach ($katas as $indexKata => $kata) {
                    $data['KATA'] = $kata;
                    $modelsKata = (isset($kata['KATA_ID']) && isset($oldRooms[$kata['KATA_ID']])) ? $oldKatas[$kata['KATA_ID']] : new Kata;
                    $modelsKata->load($data);
                    $modelsKata[$indexWilaya][$indexKata] = $modelsKata;
                    $valid = $modelsKata->validate();
                }
            }
        }
        $oldKatasIDs = ArrayHelper::getColumn($oldKatas, 'KATA_ID');
        $deletedKatasIDs = array_diff($oldKatasIDs, $katasIDs);
        if ($valid) {
            $transaction = Yii::$app->db->beginTransaction();
            try {
                if ($flag = $modelMkoa->save(false)) {
                    if (! empty($deletedKatasIDs)) {
                        Kata::deleteAll(['id' => $deletedKatasIDs]);
                    }
                    if (! empty($deletedWilayaIDs)) {
                        Wilaya::deleteAll(['W_ID' => $deletedWilayaIDs]);
                    }
                    foreach ($modelsWilaya as $indexWilaya => $modelWilaya) {
                        if ($flag === false) {
                            break;
                        }
                        $modelMkoa->mkoa_M_ID = $modelMkoa->M_ID;
                        if (!($flag = $modelWilaya->save(false))) {
                            break;
                        }
                        if (isset($modelsKata[$indexWilaya]) && is_array($modelsKata[$indexWilaya])) {
                            foreach ($modelsKata[$indexWilaya] as $indexKata => $modelKata) {
                                $modelKata->wilaya_W_ID = $modelWilaya->W_ID;
                                if (!($flag = $modelKata->save(false))) {
                                    break;
                                }
                            }
                        }
                    }
                }

                if ($flag) {
                    $transaction->commit();
                    return $this->redirect(['view', 'M_ID' => $modelMkoa->M_ID]);
                } else {
                    $transaction->rollBack();
                }
            } catch (Exception $e) {
                $transaction->rollBack();
            }
        }
    }
    return $this->render('update', [
        'modelPerson' => $modelMkoa,
        'modelsHouse' => (empty($modelsWilaya)) ? [new Wilaya] : $modelsWilaya,
        'modelsRoom' => (empty($modelsKata)) ? [[new Kata]] : $modelsKata
    ]);
}

    /**
     * Deletes an existing Person model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id
     * @return mixed
     * @throws NotFoundHttpException
     */

    public function actionDelete($id)
{
    $model = $this->findModel($id);
    $name = $model->MKOA;
    if ($model->delete()) {
        Yii::$app->session->setFlash('success', 'Record  <strong>"' . $name . '"</strong> deleted successfully.');
    }
    return $this->redirect(['index']);
}
/**
 * Finds the Person model based on its primary key value.
 * If the model is not found, a 404 HTTP exception will be thrown.
 * @param integer $id
 * @return Mkoa the loaded model
 * @throws NotFoundHttpException if the model cannot be found
 */
protected function findModel($id)
{
    if (($model = Mkoa::findOne($id)) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}
}

?>

Hello, sorry for the late response.
It seens to be programming logics error.

  1. $model = $this->findModel($id); maybe this sometimes this function can’t find this model by “$id”, you will need to handle this.
  2. function actionUpdate does not instantiate variable “$modelsWilaya”. The others errors follow the same mistake.
  3. For multiple tables forms, you will need to create a Form class to handle multiple tables forms, it gives you more flexibility to work with.
  4. Most of delete errors on models occur when there is a database exception, so you can solve this with a try/catch exception.

Hope it helps you to solve future errors.
Thank you!

Thank you I appreciate…