2016-03-19 11 views
0

Я хотел бы понять основы работы с формой из модального окна в Yii2? Это мое настоящее понимание, и я буду признателен, если кто-нибудь сможет объяснить мне, что я пропустил. Итак, у меня есть ListView с записями. Каждая запись содержит кнопку. Кнопка открывает модаль с формой внутри:Форма Yii2 в модальном окне

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(); 

В форме «action» я написал сообщение о голосовании и голосовании. Поэтому я ожидаю, что данные post внутри функции actionVote моего VoteController.

public function actionVote() 
    { 
     if (Yii::$app->request->post()) { 
     $id = Yii::$app->request->post('search'); 
     Yii::$app->session->setFlash('error', $id); 
     return true; 
     } 
    } 

Для подачи я использую 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; 
    } 

Но после щелчка на Submit формы я вижу два предупреждения. Модальные тоже не скрыты. Сообщение Flash также не отображается. Что я делаю неправильно? Может ли кто-нибудь четко объяснить пошаговую процедуру потока данных? На данный момент у меня такое понимание:

  1. Open Modal;
  2. Нажмите Форма отправки внутри Modal;
  3. Загрузить данные через ajax в действие контроллера;
  4. улавливать данные из сообщения и выполнять код действия контроллера; Что я пропустил?
+0

Вы же оповещения дважды ? , Вы проверили консоль браузеров, чтобы узнать, был ли сделан запрос на почту? –

ответ

0

Я вижу несколько проблем, сначала вы используете событие отправки, так что yii запускается после события и браузера во второй раз (это причина, по которой предупреждение появляется дважды), вы должны использовать событие beforeSubmit. Во-вторых, сообщение не появляется, потому что вы не будете его повторно отображать, просто установите его в свой контроллер. Чтобы закрыть модальный вы должны изменить свой код

$(".modal").modal('hide'); 

полезная ссылка this

+0

Это видео помогло мне понять мою проблему: сначала https://www.youtube.com/watch?v=aUAUsADp9ao второй https://www.youtube.com/watch?v=ZhblqEROLWo – Dmytro

7

Вы можете просто следовать ниже шаг ...

шаг1: определите кнопку ссылки, как

<?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: определить ваше всплывающее окно (удаленный URL)

<div class="modal remote fade" id="modalvote"> 
     <div class="modal-dialog"> 
      <div class="modal-content loader-lg"></div> 
     </div> 
</div> 

step3: определите удаленный URL действия в контроллере, как

public function actionMyComment() 
{ 
     $model = new MyComment(); 
     return $this->renderAjax('_add_comment', [ 
       'model' => $model, 
     ]); 

} 

step4: определить ваш взгляд файл _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">&times;</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(); ?> 

это его ... :)

Смежные вопросы