2017-06-08 5 views
0

Wie speichere ich eine Datei mit einem benutzerdefinierten Dateinamen? Ich benutzte Gii-Generator für meine Website und ich habe eine Datei-Eingabe in meiner Form, jetzt will ich ist nach dem Speichern der Datei der Name ist von report_id bekommen, das ist mein Primärschlüssel. Zum Beispiel, 1_.docx die 1 ist meine report_id. Ich habe auch ein doc_name Feld, ja, ich kann meine Datei speichern und den Namen in doc_name erhalten. Beispiel: Beispiel.docx. Aber mein Problem ist, wenn ich die report_id verwendet und zum Beispiel die Daten speichern, ist der Name der Datei nur .docx.Yii2 Wie speichere ich eine Datei mit einem benutzerdefinierten Dateinamen?

Dies ist mein Controller:

public function actionCreate() 
{ 
    $model = new reportDetails(); 
    if ($model->load(Yii::$app->request->post())) 
{  
    $project= $model->doc_name; 
    $model->upload_file= UploadedFile::getInstance($model,'doc_file'); 
    $model->upload_file->saveAs('uploads/'.$project.'.'.$model->upload_file->extension); 
    $model->doc_file='uploads/'.$project.'.'.$model->upload_file->extension; 
    $model->doc_name=$project.'.'.$model->upload_file->extension; 
    $model->save(); 

    Yii::$app->getSession()->setFlash('success','Data saved!'); 
    return $this->redirect(['view','id'=> $model->report_id]); 
    } 

    else { 

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

} 

Wie Sie sehen können, $ Projekt = $ modell-> DOC_NAME; Dies sind die Codes, wenn ich Daten speichere, der Name der Datei wird von doc_name kommen, aber wenn ich es in report_id ändere, wenn ich es speichere, ist das Ergebnis leer oder nur .docx.

Das ist mein _form:

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> 
    &nbsp;&nbsp;&nbsp;<?= Html::button('<i class="fa fa-plus"></i>&nbsp;Add Person', ['value' => Url::to('index.php?r=name/create'), 'class' => 'btn btn-custom-pos btn-success', 'id' => 'officialsfor']) ?> 
     </br> 
     </br> 
    <?php Pjax::begin(['id' => 'for_from']) ?> 
     <div class="col-sm-6"> 
    <?= $form->field($model, 'doc_for')->widget(Select2::classname(), [ 
      'data' => ArrayHelper::map(Name::find()->asArray()->all(), 
      'name_id', 
      function($model, $defaultValue){ 
       return $model['position'].' '.$model['fname'].' '.$model['mname'].' '.$model['lname']; 
      }), 
      'language' => 'en', 
      'options' => ['placeholder' => 'Choose a person ...'], 
      'pluginOptions' => [ 
       'allowClear' => true, 
       'width' => 500, 
      ], 
      ]); ?> 
     </div> 
     <div class="col-sm-6"> 
    <?= $form->field($model, 'doc_from')->widget(Select2::classname(), [ 
      'data' => ArrayHelper::map(Name::find()->asArray()->all(), 
      'name_id', 
      function($model, $defaultValue){ 
      return $model['position'].' '.$model['fname'].' '.$model['mname'].' '.$model['lname']; 
      }), 
      'language' => 'en', 
      'options' => ['placeholder' => 'Choose a person ...'], 
      'pluginOptions' => [ 
       'allowClear' => true, 
       'width' => 500, 
      ], 
      ]); ?> 
<?php Pjax::end(); ?> 
     </div> 
     </br> 
     </br></br></br> 
     <div class="broder" style=" border-radius: 5px; padding: 12px; ">  
     </div> 
    <div class="col-sm-6"> 
     <?= $form->field($model, 'user_id')->textInput(['type' => 'hidden','style'=>'width:500px;','placeholder' => 'Enter a Reference No....','value' =>ucfirst(Yii::$app->user->identity->first_name) . ' ' . ucfirst(Yii::$app->user->identity->middle_name) . ' ' . ucfirst(Yii::$app->user->identity->last_name)]) ?> 
     <?= Html::activeLabel($model, 'user_id', ['label'=>ucfirst(Yii::$app->user->identity->first_name) . ' ' . ucfirst(Yii::$app->user->identity->middle_name) . ' ' . ucfirst(Yii::$app->user->identity->last_name),'style' => 'font-size: 21px;','class' => 'color']) ?> 
     <br> 
     <br> 
     <?= $form->field($model, 'reference_no')->textInput(['style'=>'width:500px','placeholder' => 'Enter a Reference No....']) ?> 
     <?= $form->field($model, 'subject')->textInput(['maxlength'=>true,'style'=>'width:500px','placeholder' => 'Enter a Subject....']) ?> 
    <?= $form->field($model, 'doc_date')->widget(
     DatePicker::className(), [ 
      'inline' => false, 
      'options' => ['placeholder' => 'Choose a Entry Date ...'], 
      'clientOptions' => [ 
      'autoclose' => true, 
      'format' => 'yyyy-mm-dd' 
       ] 
      ]);?> 
    </div> 
    <div class="col-sm-6" style="padding-top: 14px; "> 
     </br> 
     </br> 
     </br></br> 
    <?= $form->field($model, 'drawer_id')->textInput(['maxlength'=>true,'style'=>'width:500px','placeholder' => 'Enter a Drawer ID....', ]) ?> 
    <?= $form->field($model, 'doc_name')->textInput(['maxlength'=>true,'style'=>'width:500px','placeholder' => 'Enter a Document Name....']) ?> 
     <?= $form->field($model, 'doc_file')-> widget(
     FileInput::classname(),[ 
     'name' => 'doc_file', 
     'options' => ['accept' => '.docx','.doc','.docs'], 
     'pluginOptions' => [ 
      'showPreview' => false, 
      'showCaption' => true, 
      'showRemove' => true, 
      'showUpload' => false 
      ] 
     ]); 
     ?> 
    </div> 
</div> 
</br> 
<div class="row"> 
    <div class="col-sm-12 text-center"> 
    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? '<i class="fa fa-plus"></i>&nbsp;Create' : '<i class="fa fa-pencil"></i>&nbsp;Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-success','style' => 'padding:10px 60px;']) ?> 
    </div> 
    </div> 
</div> 
<?php ActiveForm::end(); ?> 

Antwort

0

wie Sie gesagt haben REPORT_ID Primärschlüssel ist, so dass Sie nicht den neuen Datensatz speichern in db vor erhalten.

gemäß Ihrer Logik, Einfügung happt mit neuen Rekord. Also müssen Sie Ihren Code wie folgt aktualisieren. prüfen Sie.

public function actionCreate() 
{ 
    $model = new reportDetails(); 
    if ($model->load(Yii::$app->request->post())) 
    {  
     $project= $model->doc_name; 
     $model->upload_file = UploadedFile::getInstance($model,'doc_file'); 
     $model->upload_file->saveAs('uploads/'.$project.'.'.$model->upload_file->extension); 
     $model->doc_file='uploads/'.$project.'.'.$model->upload_file->extension; 
     $model->doc_name=$project.'.'.$model->upload_file->extension; 
     $model->save(); 

     // after save you will get report_id 
     rename('uploads/'.$project.'.'.$model->upload_file->extension, 'uploads/'.$model->report_id.'.'.$model->upload_file->extension); 
     $model->doc_file='uploads/'.$model->report_id.'.'.$model->upload_file->extension; 
     $model->doc_name=$model->report_id.'.'.$model->upload_file->extension; 
     $model->save(); 


     Yii::$app->getSession()->setFlash('success','Data saved!'); 
     return $this->redirect(['view','id'=> $model->report_id]); 
    } 

    else { 

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

} 
+0

Sie sind so erstaunlich. Es funktioniert, vielen Dank. Daumen hoch! –

Verwandte Themen