2016-06-08 92 views
0

我想进行动态输入以将图像保存到我的网站。 我使用yii2-dynamicform和Kartik输入文件扩展名。但是,它总是将它保存为空。 谢谢你的帮助在Yii2中输入图像Dynamic Form始终为空

ps:...是我的代码的其他部分,与这个问题无关。 :)

在控制器:

<?php 

namespace frontend\controllers; 

use Yii; 
use common\models\Election; 
use common\models\ElectionSearch; 
use common\models\Model; 
use common\models\Kandidat; 
use yii\web\Controller; 
use yii\web\NotFoundHttpException; 
use yii\filters\VerbFilter; 
use yii\data\ActiveDataProvider; 
use yii\web\Session; 
use yii\web\UploadedFile; 
use yii\helpers\ArrayHelper; 

class ElectionController extends Controller 
{ 
    ... 
    public function actionCreate() 
    { 
     $model = new Election(); 
     $modelsKandidat = [new Kandidat]; 

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

      $modelsKandidat = Model::createMultiple(Kandidat::classname()); 
      Model::loadMultiple($modelsKandidat, Yii::$app->request->post()); 

      // validate all models 
      $valid = $model->validate(); 
      $valid = Model::validateMultiple($modelsKandidat) && $valid; 

      if ($valid) { 
       $transaction = \Yii::$app->db->beginTransaction(); 
       try { 
        if ($flag = $model->save(false)) { 
         foreach ($modelsKandidat as $modelKandidat) { 
          $modelKandidat->id_election = $model->id_election; 

          if($modelKandidat->file = UploadedFile::getInstance($modelKandidat,'file')) 
          { 
           $imageName = date('dmyhis_').$modelKandidat->id_election; 
           $modelKandidat->file->saveAs('../../common/file/fotokandidat/'.$imageName.'.'.$modelKandidat->file->extension); 

           $modelKandidat->foto = $imageName.'.'.$modelKandidat->file->extension; 
          } 

          if (! ($flag = $modelKandidat->save(false))) { 
           $transaction->rollBack(); 
           break; 
          } 
         } 
        } 
        if ($flag) { 
         $transaction->commit(); 
         return $this->redirect(['view', 'id' => $model->id_election]); 
        } 
       } catch (Exception $e) { 
        $transaction->rollBack(); 
       } 
      } 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
       'modelsKandidat' => $modelsKandidat, 
      ]); 
     } 
    } 

    ... 
} 

在_form:

<?php 

use yii\helpers\Html; 
use yii\widgets\ActiveForm; 
use kartik\file\FileInput; 
use yii\helpers\ArrayHelper; 
use dosamigos\datepicker\DatePicker; 
use wbraganca\dynamicform\DynamicFormWidget; 
?> 

<div class="election-form"> 

    <?php $form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data', 'id' => 'dynamic-form']]); ?> 

    ... 

    <!-- mulai input kandidat !--> 
    <div class="row"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"><h4><i class="glyphicon glyphicon-envelope"></i>Vote</h4></div> 
      <div class="panel-body"> 
       <?php DynamicFormWidget::begin([ 
        'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 
        'widgetBody' => '.container-items', // required: css class selector 
        'widgetItem' => '.item', // required: css class 
        'limit' => 4, // the maximum times, an element can be cloned (default 999) 
        'min' => 1, // 0 or 1 (default 1) 
        'insertButton' => '.add-item', // css class 
        'deleteButton' => '.remove-item', // css class 
        'model' => $modelsKandidat[0], 
        'formId' => 'dynamic-form', 
        'formFields' => [ 
         'nama', 
         'deskripsi', 
         'riwayat', 
         'file', 
        ], 
       ]); ?> 

       <div class="container-items"><!-- widgetContainer --> 
       <?php foreach ($modelsKandidat as $i => $modelsKandidat): ?> 
        <div class="item panel panel-default"><!-- widgetBody --> 
         <div class="panel-heading"> 
          <h3 class="panel-title pull-left">Kandidat</h3> 
          <div class="pull-right"> 
           <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button> 
           <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button> 
          </div> 
          <div class="clearfix"></div> 
         </div> 
         <div class="panel-body"> 
          <?php 
           // necessary for update action. 
           if (! $modelsKandidat->isNewRecord) { 
            echo Html::activeHiddenInput($modelsKandidat, "[{$i}]id_kandidat"); 
           } 
          ?> 
          <div class="row"> 
           <div class="col-sm-4"> 
            <?= $form->field($modelsKandidat, "[{$i}]nama")->textInput(['maxlength' => true]) ?> 
           </div> 
           <div class="col-sm-4"> 
            <?= $form->field($modelsKandidat, "[{$i}]deskripsi")->textarea(['rows' => 6]) ?> 
           </div> 
           <div class="col-sm-4"> 
            <?= $form->field($modelsKandidat, "[{$i}]riwayat")->textarea(['rows' => 6]) ?> 
           </div> 
           <div class="col-sm-4"> 
            <?= $form->field($modelsKandidat, "[{$i}]file")->fileInput() ?> 
           </div> 
          </div><!-- .row --> 

         </div> 
        </div> 
       <?php endforeach; ?> 
       </div> 
       <?php DynamicFormWidget::end(); ?> 
      </div> 
     </div> 
    </div> 
    <!-- selesai input kandidat !--> 

    ... 

    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

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

</div> 
+0

查看演示源代码http://wbraganca.com/yii2extensions/dynamicform-demo2/source-code帮助上传files.I认为有差异。 – yafater

+0

'print_r($ modelKandidat-> file)'看到输出 –

+0

请把你的两个'模型'代码。 – vishuB

回答

0

这是从@ shoara/@ zahraj答案: 我想你忘了你的文件`

指定索引
foreach ($modelsKandidat as $keyindex=>$modelKandidat) 
{ 
    $modelKandidat->id_election = $model->id_election; 
    if ($modelKandidat->file = UploadedFile::getInstance($modelKandidat, "[{$keyindex}]file")) { 
     ....... 
    } 
} 

看演示控制器和形式的一部分,想象$modelCatalogOption在演示是你的$model = new Election();$modelsOptionValue是您的$modelsKandidat = [new Kandidat];如果您尝试并检查您的控制器中的值我相信您可以轻松解决此问题。注意动作创建