2016-07-28 13 views
0

Ich benutze Yii2 Bootstrap modal zum Hochladen von Bildern, das Problem ist, ich muss auf Create Button doppelklicken, dann Formular senden funktioniert sonst funktioniert es nicht mit einem einzigen Klick. Bei Doppelklick wird das Bild hochgeladen und die Formulardaten werden ebenfalls in der Datenbank gespeichert.Yii2 Bild von Modal-Ausgabe hochladen

Ist dieses Problem mit meinem Code?

Hier Code:

// Formular

<?php Pjax::begin(['id' => 'banner-form']) ?> 
<?php $form = ActiveForm::begin([ 
    'id' => 'banner-form', 
    'options' => [ 
    'data-pjax' => true, 
    'enctype' => 'multipart/form-data' 
    ] 
    ]); 
?> 
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> 
<?= $form->field($model, 'banner') 
->fileInput([ 
"accept"=>"image/*" 
]) 
?> 

<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 

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

// Modell

[['banner'], 'file', 'skipOnEmpty' => false, 
        'extensions' => ['jpg', 'jpeg', 'png', 'gif'] 
     ] 

//index.php

<p> 
<?= Html::a(Yii::t('app', 'Create Banner'), null, ['class' => 'btn btn-success', 'id'=>'createBannerButton', 
      'value'=>Url::to(['/banner/create'])]) ?> 
</p> 

<?php Pjax::begin(['id' => 'banner-index']) ?> 
<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 

     .... 

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

// Controller-

use yii\web\UploadedFile; 

class BannerController extends Controller 
{ 
... 
    public function actionCreate() 
    { 
     $model = new Banner(); 

     if ($model->load(Yii::$app->request->post())){ 

     $file = UploadedFile::getInstance($model, 'banner'); 
      if (!empty($file)) 
       $model->banner = $file; 
     if($model->save()){ 
      if (!empty($file)) 
       $file->saveAs(Yii::getAlias('@root') .'/uploads/' . $file); 

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

//layouts/main.php

<?php 

Modal::begin([ 
     'header' => '', 
     'id' => 'modal', 
     'size' => 'modal-medium', //medium 
     'clientOptions' => ['backdrop' => 'static', 'keyboard' => false] 
     ]); 

    echo "<div id='modalContentBackend'> 
     <div class='col-lg'> 
      <img src='/images/loading.gif' width='280' height='210' alt='loading...'> 
     </div> 
     </di>"; 

Modal::end(); 
?> 
<?php $this->endBody() ?> 

//backend/web/js/custom.js

$(function(){ 
    $("#createBannerButton").click(function(){ 
     $("#modal").modal('show') 
        .find('#modalContentBackend') 
        .load($(this).attr('value')); 
    }); 
}); 

// Backend/assets/AppAsset

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/site.css', 
    ]; 
    public $js = [ 
     'js/custom.js' 
    ]; 
    public $depends = [ 
     'yii\web\YiiAsset', 
     'yii\bootstrap\BootstrapAsset', 
    ]; 
} 

Antwort

0

Ich habe das Problem, ich bin einschließlich Pjax::begin() in index.php und _form.php, ich habe Pjax::begin() aus _form.php entfernt und jetzt funktioniert es gut.