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
' . $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();
?>
<?= "" ?>
<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>
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'],
];
}