2017-06-08 13 views
0

カスタムファイル名を使用してファイルを保存するにはどうすればよいですか?私は私のウェブサイトのgiiジェネレータを使用して、私は私のフォームのファイル入力が今、私の主キーであるreport_idから取得するファイルを保存した後です。たとえば、1_.docxは1で、report_idは1です。私はまたdoc_nameフィールドを持っています、はい私は私のファイルを保存し、doc_nameで名前を取得することができます。たとえば、sample.docxです。しかし、私の問題は、私がreport_idを使用して、例えばファイルの名前が.docxだけであるというデータを保存する場合です。Yii2カスタムファイル名でファイルを保存する方法は?

これは私のコントローラである:

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, 
    ]); 
    }   

} 

あなたは、$プロジェクト= $モデル - > doc_nameを見ることができるように。これはコードを私がデータを保存するとき、ファイル名はdoc_nameから取得しますが、私はreport_idに変更すると、私はそれを保存すると空白または.docxのみです。あなたはそれが前にDBに新しいレコードを保存取得することはできませんのでREPORT_IDは、主キーで言ったように

<?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(); ?> 

答えて

0

は、これが私の_formです。

あなたのロジックごとに、新しいレコードで挿入しています。以下のようにコードを更新する必要があります。それを確認してください。

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

あなたはとても素晴らしいです。その作業、ありがとうございました。いいぞ! –

関連する問題