2016-01-13 85 views
0

screenshotYii2的FileInput - 文件沒有保存到我使用Yii2和卡爾蒂克的擴展的FileInput服務器

。我在保存目錄時遇到問題。我正在使用yii-advanced模板,並使用gii生成CRUD代碼。目前正在編輯它。

當我保存它時,它拒絕保存並顯示「請上傳文件」消息。

文件將主要保存爲.doc和.pdf。

如果我在模型中設置'skipOnEmpty = True',它將保存表單,但不保存文件。

我的mysql表上的數據類型設置爲VARCHAR,因爲我只想保存它的路徑。

我遵循這個指南 - http://webtips.krajee.com/upload-file-yii-2-using-fileinput-widget/

這裏是我的模型;

<?php 

namespace app\models; 

use Yii; 

class FormMovement extends \yii\db\ActiveRecord 
{ 

    public static function tableName() 
    { 
     return 'form_movement'; 
    } 

    public function rules() 
    { 
     return [ 
      [['fm_date_received', 'fm_form_name', 'fm_from', 'fm_ptj'], 'required'], 
      [['form_id'], 'integer'], 
      [['fm_date_received', 'fm_date_action1', 'fm_date_action2'], 'safe'], 
      [['fm_form_name', 'fm_note'], 'string', 'max' => 500], 
      [['fm_from', 'fm_ptj', 'fm_action1', 'fm_action2'], 'string', 'max' => 100], 
      [['fm_upload'], 'file', 'skipOnEmpty' => false, 'extensions'=>'jpg,pdf,png,doc,docx,xls,xlsx'], 
     ]; 
    } 

} 

那麼這裏就是我的控制器(我只包括上載功能,但它與所產生的代碼(CRUD操作)休息,

<?php 

namespace frontend\controllers; 

use Yii; 
use app\models\FormMovement; 
use app\models\SearchFormMovement; 
//use app\models\FormType; 
use yii\web\Controller; 
use yii\web\NotFoundHttpException; 
use yii\filters\VerbFilter; 
use yii\web\UploadedFile; 

class FormMovementController extends Controller 
{ 
public function actionUpload() 
{ 
    $model = new FormMovement; 
    if ($model->load(Yii::$app->request->post())) { 
     $file = UploadedFile::getInstance($model, 'fm_upload'); 

     // store the source file name 
     $model->fm_upload = $file->name; 
     $ext = end((explode(".", $file->name))); 

     $model->fm_upload = Yii::$app->security->generateRandomString().".{$ext}"; 

     $path = Yii::$app->params['uploadPath'] . $model->fm_upload;; 

     if($model->save()){ 
      $file->saveAs($path); 
      return $this->redirect(['view', 'id'=>$model->_id]); 
     } else { 
      // error in saving model 
     } 
    } 
    return $this->render('create', [ 
     'model'=>$model, 
    ]); 
} 
} 

,這是我的觀點,也同樣像控制器。守則只上傳一部分。

<?php 

use yii\helpers\Html; 
use kartik\date\DatePicker; 
//use app\models\FormMovement; 
use app\models\FormType; 
use yii\bootstrap\ActiveField; 
use kartik\form\ActiveForm; 
use kartik\file\FileInput; 

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

<div class="form-movement-form"> 

    <?php $form = ActiveForm::begin([![\[][1]][1] 
     'type' => ActiveForm::TYPE_HORIZONTAL, 
     'formConfig' => ['labelSpan' => 3, 'deviceSize' => ActiveForm::SIZE_SMALL], 
     'options' => ['enctype' => 'multipart/form-data'] 
    ]); ?> 
<div class="form-group kv-fieldset-inline"> 
     <?= Html::activeLabel($model, 'fm_upload', [ 
       'label'=>'MUAT NAIK FAIL', 
       'class'=>'col-sm-1 control-label' 
      ]) ?> 

     <div class="col-sm-8"> 
     <?= $form->field($model, 'fm_upload',[ 
        'showLabels'=>false 
       ])->widget(FileInput::classname(), [ 
       'options' => ['accept' => 'image/*'], 
       'pluginOptions'=>['allowedFileExtensions'=>['jpg','pdf','png','doc','docx','xls','xlsx'] 
     ]]) ?> 
     </div> 
    </div> 

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

希望我已經提供了足夠的信息。感謝所有幫助。

編輯:這是什麼日誌看起來像,我認爲它的驗證問題,但我不能真正找出哪一個造成它,模型或控制器。

SO2

+0

拋出任何錯誤,同時節省? –

+0

@InsaneSkull沒有錯誤,我的猜測是,它沒有保存。看到我編輯過的日誌截圖。 – Luqman

+0

有關驗證錯誤的更多信息,請參閱瀏覽器控制檯。 –

回答

2

檢查的路徑是正確的,不缺少/例如。

定義您的路徑:

Yii::$app->params['uploadPath'] = Yii::getAlias("@frontend") . '/web/uploads/'; 

然後,$模型 - > fm_upload沒有,直到你保存它的價值:

if ($model->load(Yii::$app->request->post())) { 
     $file = UploadedFile::getInstance($model, 'fm_upload'); 

     // store the source file name 
     $ext = end((explode(".", $file->name))); 

     $new_name = Yii::$app->security->generateRandomString().".{$ext}"; 

     $path = Yii::$app->params['uploadPath'] . '/' . $new_name; 
     $model->fm_upload = $new_name; 

     $file->saveAs($path); 

     if($model->save()){ 
      return $this->redirect(['view', 'id'=>$model->_id]); 

     } else { 
      // error in saving model 
     } 
    } 
+0

仍然是同樣的問題。 其實我不確定路徑,默認路徑在哪裏,如果我做./uploads/,基準路徑在哪裏? 然後,關於重定向,是否正確? 'view'和'id'部分。 – Luqman

+0

對於上傳路徑,您可以使用「@ web」或「@ webroot」等別名。 –

+0

@InsaneSkull所以,像@ web/uploads/?? – Luqman

相關問題