Как сохранить данные в БД из модального всплывающего окна в Yii2?

У меня есть простое представление, которое правильно сохраняет данные в БД, однако, когда я помещаю это представление в модальное всплывающее окно на другую страницу, оно не сохраняет никаких данных в БД, модальное просто отображается. Что еще нужно сделать, чтобы сохранить данные в БД из всплывающего окна? Спасибо

Это контроллер:

public function actionEditMyPopup()
{
    $model = new MyPopupForm();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        $model->insertEditMyPopup();
        return $this->renderAjax('edit-mypopup', ['model' => $model]);
    } else {
        return $this->renderAjax('edit-mypopup', ['model' => $model]);
    }   
} 

Это вид всплывающего окна:

<?php Pjax::begin(['enablePushState' => false]); ?>

<?php $form = ActiveForm::begin(['id' => 'edit-mypopup-form', 'options' => ['data-pjax' => true],]); ?>

    <?= $form->field($model, 'attribute1') ?>

<div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'edit-mypopup-button']) ?>
</div>

<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>

И Модель имеет объявление переменных и функцию insertEditMyPopup(), которые вставляют данные в БД.

<?php
namespace app\models;
use Yii;
use yii\base\Model;
class EditMyPopupForm extends Model
{
    public $attribute1;

    public function rules()
    {
        return [
              [['attribute1'], 'required'],
        ];
    }

    public function insertEditMyPopup()
    {
        //attributes is the name of the table
        $a = new attributes();
        $a->att1 = $this->attribute1;
        $a->save();

    }//end function  
}//end class

person Jan Beeck    schedule 10.09.2017    source источник
comment
поделитесь кодом в: insertEditMyPopup()   -  person Kalu    schedule 11.09.2017
comment
Достаточно простого $model-›save(). если вы не выполняете дополнительную обработку в insertEditMyPopup()   -  person Kalu    schedule 11.09.2017
comment
Я пробовал использовать $model-›save() после функции insertEditMyPopup() в контроллере, и это не сработало. Функция в модели просто вставляет данные в БД. Что может быть не так? Потому что поток MVC работает правильно без модального всплывающего окна.   -  person Jan Beeck    schedule 11.09.2017
comment
пожалуйста, опубликуйте то, что у вас есть в insertEditPopup()   -  person Kalu    schedule 12.09.2017
comment
пожалуйста, поделитесь тем, что у вас есть на insertEditPopup()   -  person Kalu    schedule 12.09.2017
comment
Я добавил Модель. Спасибо.   -  person Jan Beeck    schedule 12.09.2017


Ответы (1)


Я преодолел проблему, добавив следующий код в файл js:

$('body').on("click", "form#edit-mypopup-form", function() {
    var form = $(this);
    if (form.find('.has-error').length) {
      return false;
    }
        $.ajax({
            url: form.attr('action'),
            type: "POST",
            data: form.serialize(),
            success: function(results){

                 $(form).find('.results').html(results); 

            }
        });
         return false;
});
person Jan Beeck    schedule 12.09.2017