使用模式将数据保存到数据库

时间:2019-08-29 05:21:45

标签: php yii2 bootstrap-modal

我有问题。

我需要打开一个模式以另一个表的形式在表中插入数据。

我可以使用Ajax在控制器中使用actionCreate在create view的视图中打开模态,但是当我随意保存模态时,默认情况下,控制器会将我重定向到action视图,如果我改变了,它会在当前标签中打开完整视图。

该问题通过将视图重定向到该模态应该处于if条件的视图而暂时解决,但是当我测试插入无效数据时,该视图将全屏显示并显示消息错误(在ajax render中)。

此外,数据始终会保存。

我知道有一种无需更改视图即可在模态中呈现的方法,但是我是新手,对使用模态没有任何经验。

请需要您的帮助。

有我的查看文件:

<?php

use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use yii\bootstrap\Modal;
use yii\helpers\Url;
use app\models\Catalogo;


/* @var $this yii\web\View */
/* @var $model app\models\Articulo */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="articulo-form">

    <?php $form = ActiveForm::begin(['id'=>'articuloCreate']); ?>

    <?= $form->field($model, 'ID_CATALOGO')->dropDownList(
        ArrayHelper::map(Catalogo::find()->all(),'ID_CATALOGO','NOMBRE_CATALOGO'),
        [
            'style'=>'width:500px',
            'prompt'=>'Seleccionar catálogo',  
        ]); ?>
    <?= Html::button('Agregar catálogo', [                        
        'value' => Url::to(['catalogo/create']),
        'class' => 'btn btn-primary',
        'id' => 'BtnModalCatalogo',
        'data-toggle'=> 'modal',
        'data-target'=> '#catalogo',
      ]) ?>
   <?php ActiveForm::end(); ?>

同一视图中的模态:

<?php                 
    Modal::begin([
            'header' => 'Crear catálogo',
            'id' => 'catalogo',
            'size' => 'modal-md',
        ]);
    echo "<div id='modalContent'>BtnModalCatalogo</div>";
    Modal::end();
?>

还有更多的代码,但是我认为毫无意义。

这是我的JS:

$('#BtnModalCatalogo').click(function(e){    
    e.preventDefault();
    $('#catalogo').modal('show')
        .find('#modalContent')
        .load($(this).attr('value'));
   return false;
});

这是在控制器中创建的动作:

public function actionCreate()
{
    $model = new Catalogo();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->ID_CATALOGO]);
    }

    if(Yii::$app->request->isAjax){
            return $this->renderAjax('create', [
                'model' => $model,
            ]);
        }

    return $this->render('create', [
        'model' => $model,
    ]);
}

以防万一,这是操作视图:

public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

首先,谢谢。

在开始的时候,我希望控制器应该在模式中加载其他视图,但不是那样。

1 个答案:

答案 0 :(得分:0)

此操作仅在通过ajax调用时响应,并且仅在保存模型时才会重定向。

public function actionCreate()
{
    $model = new Catalogo();

    if ($model->load(Yii::$app->request->post())) {
        if($model->save()) return $this->redirect(['view', 'id' => $model->ID_CATALOGO]);
    }

    return $this->renderAjax('create', [
        'model' => $model,
    ]);

}