I would like to understand the basics of how to work with form from Modal window in Yii2? This is my current understanding and I will be grateful if someone can explain me what I missed. So, I have a ListView with records. Each record contains a button. The button opens a Modal with a Form inside:
echo Html::a('<span class="glyphicon glyphicon-bell" aria-hidden="true"></span>', ['#'],[
'id' => $model->id,
'class' => 'linkbutton',
'data-toggle'=>'modal',
'data-tooltip'=>'true',
'data-target'=>'#submit_vote'.$model->id,
'title'=> 'Assign'
]);
Modal::begin([
'size' => 'modal-lg',
'options' => [
'id' => 'submit_vote'.$model->id,
],
'header' => '<h2>Create Vote</h2>',
'footer' => 'Footer'
]);
ActiveForm::begin([
'action' => 'vote/vote',
'method' => 'post',
'id' => 'form'.$model->id
]);
echo Html::input(
'type: text',
'search',
'',
[
'placeholder' => 'Search...',
'class' => 'form-control'
]
);
echo Html::submitButton(
'<span class="glyphicon glyphicon-search"></span>',
[
'class' => 'btn btn-success',
]
);
ActiveForm::End();
Modal::end();
In Form 'action' I wrote vote/vote and method post. So I expect post data inside actionVote function of my VoteController.
public function actionVote()
{
if (Yii::$app->request->post()) {
$id = Yii::$app->request->post('search');
Yii::$app->session->setFlash('error', $id);
return true;
}
}
For submitting I use an ajax:
$('form').on('submit', function () {
alert($(this).attr('id')+$(this).attr('action')+$(this).serialize()); //just to see what data is coming to js
if($(this).attr('id') !== 'searchForm') { //some check
$.ajax({
url: $(this).attr('action'),
type: 'post',
data: $(this).serialize(),
success: function(){
$("#submit_vote15").modal('hide'); //hide popup
},
});
return false;
}
But after click on Submit form I see two alerts. Modal also not hidden. Flash message also is not showed. What I am doing wrong? Can anyone clearly explain a step by step procedure of data flow? For now my understanding is:
You may simply follow below step...
step1: define your link button like
<?php echo Html::a('<span class="glyphicon glyphicon-comment"></span>',
['/feed/mycomment','id' => $model->id],
[
'title' => 'View Feed Comments',
'data-toggle'=>'modal',
'data-target'=>'#modalvote',
]
);
?>
step2: define your popup window(remote url)
<div class="modal remote fade" id="modalvote">
<div class="modal-dialog">
<div class="modal-content loader-lg"></div>
</div>
</div>
step3: define your remote url action in your controller like
public function actionMyComment()
{
$model = new MyComment();
return $this->renderAjax('_add_comment', [
'model' => $model,
]);
}
step4: define your view file _add_comment
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<?php $form = ActiveForm::begin([ 'enableClientValidation' => true,
'options' => [
'id' => 'dynamic-form'
]]);
?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Add Comment</h4>
</div>
<div class="modal-body">
<?php echo $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?php echo $form->field($model, 'email')->textInput(['maxlength' => true]) ?>
<?php echo $form->field($model, 'comment')->textArea() ?>
</div>
<div class="modal-footer">
<?php echo Html::submitButton(Yii::t('backend', 'Send'), ['class' => 'btn btn-success']) ?>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
<?php ActiveForm::end(); ?>
that's its...:)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With