I've an active form in yii\bootstrap\Modal and i could get no way to validate my form

i have tried ajax calls, beforesubmit and even doing submit button prevent default
my main issue is it works completely fine when we fill all fields but when i miss one required field it redirects me to yii2 error page showing view not found. patching all code below

<?php Modal::begin([ 'header' => '

' . $model->title . '', 'id' => 'modal', 'size' => 'modal-lg', ]); ?> <?= "
" ?> <?php $form = ActiveForm::begin([ 'action' => ['verses/create-translation'], 'method' => 'post', 'enableAjaxValidation' => true, 'validateOnSubmit' => true, 'id' => 'translation_form' ]); ?>
<div class="box-body">

    <div class="form-group">

        <?= $form->field($translation, 'verse_id')->hiddenInput(['value' => $model->id, 'id' => 'verse_id'])->label(false); ?>

    </div>

    <div class="form-group">

        <?php

        echo $form->field($translation, 'translator_id')->dropDownList(

            $translation::getTranslatorsList(),

            [

                'prompt' => '-Choose a Translator-',

                'onchange' => '

                $.post( "index.php?r=verses/check-old-translations-by-this-translator&translator_id="+$(this).val()+"&verse_id="+$(document.getElementById("verse_id")).val(),function(data){

                    

                    $("#translation_div").hide();

                    $("#translation_added_div").show();

                    

                    if(!data)

                    {

                        $("#translation_div").show();

                        $("#translation_added_div").hide();

                    }

                });'

            ]

        );

        ?>

    </div>

    <div id="translation_added_div" style="display: none;">

        Translation for this verse has already been added

    </div>

    <div id="translation_div" style="display: none;">

        <div class="form-group">

            <?= $form->field($translation, 'title')->textInput() ?>

        </div>

        <div class="form-group">

            <?= $form->field($translation, 'content')->textInput() ?>

        </div>

        <div class="form-group">

            <?php

            echo $form->field($translation, 'language_id')->dropDownList(

                $translation::getLanguagesList(),

                [

                    'prompt' => '-Choose a Language-'

                ]

            );

            ?>

        </div>

        <div class="form-group">

            <?php

            echo $form->field($translation, 'book_id')->dropDownList(

                $translation::getBooksList(),

                [

                    'prompt' => '-Choose a Book-'

                ]

            );

            ?>

        </div>

        <div class="form-group">

            <?= $form->field($translation, 'description')->textarea(['rows' => '6']) ?>

        </div>

    </div>

</div>

<div class="box-footer">

    <?= Html::a('Cancel', ['view', 'id' => $model->id], ['class' => 'btn btn-default']) ?>

    <?= Html::submitButton('Save', ['class' => 'btn btn-info pull-right', 'id' => 'submit_button']) ?>

</div>
<?php ActiveForm::end(); Modal::end(); ?> <?= "
" ?>

controller

public function actionCreateTranslation()

{

    $model = new Translation();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {

        if (count($model->errors) === 0) {

            Yii::$app->session->setFlash('success', 'Record Created Successfully');

            return $this->redirect(['view', 'id' => $model->verse_id]);

        }

    } else {

        return $this->renderAjax('create-translation', [

            'model' => $model,

        ]);

    }

}

model

public function rules()

{

    return [

        ['title', 'trim'],

        ['title', 'string'],

        ['content', 'trim'],

        [['content', 'language_id', 'verse_id', 'translator_id'], 'required'],

        [['content','description'], 'string'],

        [['description','book_id'], 'safe'],

        [['book_id', 'language_id', 'verse_id', 'translator_id'], 'integer'],

    ];

}

i just had to add required html attribute and it won’t let me save anything until i enter data in required fields

            <?= $form->field($translation, 'content')->textInput(['required' => true]) ?>
1 Like