У меня есть простое представление, которое правильно сохраняет данные в БД, однако, когда я помещаю это представление во всплывающее окно Модал на другую страницу, оно не сохраняет никаких данных в БД, просто отображается Модал. Что еще нужно сделать, чтобы сохранить данные в БД из всплывающего окна? Спасибо
Это контроллер:
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
Я преодолел проблему, добавив следующий код в файл 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;
});
Других решений пока нет …