2016-12-29 43 views
2

我想在服務器上傳文件並查看上傳的文件我必須將模型ID傳遞給視圖操作。這是一切都好,直到我加入在urlindent傳遞丟失的id

'options' => ['enctype'=>'multipart/form-data'] 

我的ActiveForm。添加後,通過URL傳遞給動作視圖的id不再顯示,並且我缺少參數消息。 我使用警予2.0.2

創建行動:

public function actionCreate() 
{ 
    $model = new SubContent(); 

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

     $files =UploadedFile::getInstance($model,'files'); 

     $files->saveAs('uploads/'.$files->getBaseName().'.'.$files->getExtension()); 
     $model->files=$files; 

     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

形式:

<div class="sub-content-form"> 

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

    <?= $form->field($model, 'files')->fileInput(['maxlength' => 255]) ?> 
    <?= $form->field($model, 'sub_id') 
       ->dropDownList(ArrayHelper::map(Subjects::find() 
       ->where(['year'=>\Yii::$app->user->identity->year]) 
       ->all(),'id','sub_name'), 
       ['prompt'=>' select subject'] 
     ) ?> 

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

</div> 

,這是我的模型

  <?php 

     namespace frontend\models; 

     use Yii; 

      /** 
     * This is the model class for table "sub_content". 
      * 
     * @property integer $id 
     * @property string $files 
      * @property integer $sub_id 
      * 
      * @property Subjects $sub 
      */ 
      class SubContent extends \yii\db\ActiveRecord 
      { 
      /** 
      * @inheritdoc 
      */ 
      public static function tableName() 
      { 
      return 'sub_content'; 
       } 

      public function rules() 
      { 
       return [ 
       [['files', 'sub_id'], 'required'], 
      [['sub_id'], 'integer'], 
      [['files'], 'string', 'max' => 255] 


     ]; 
     } 

     public function attributeLabels() 
      { 
      return [ 
      'id' => 'ID', 
      'files' => 'Files', 
      'sub_id' => 'Sub ID', 
      ]; 
      } 

      /** 
      * @return \yii\db\ActiveQuery 
      */ 
      public function getSub() 
       { 
       return $this->hasOne(Subjects::className(), ['id' => 
      'sub_id']); 
      } 
      } 

編輯.....仍沒有工作

+0

型號你改變這樣的 [「文件」 [],「文件」,「skipOnEmpty」 =>真], –

+0

@Umar阿里仍然沒有工作我的朋友 –

+0

告訴我你的錯誤 –

回答

0

首先 - 自2.0.8開始,您不必添加enctype,它會在您添加fileInput字段時自動完成。

您是覈實,如果$model->save()返回true,它看起來像模型沒有通過驗證正因爲如此$model不保存正因爲如此$model->id沒有設置

你應該這樣做:

public function actionCreate() 
{ 
    $model = new SubContent(); 

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

     $model->files = UploadedFile::getInstance($model,'files'); 

     if ($model->save()) { 
      $model->files->saveAs('uploads/' . $files->getBaseName() . '.' . $files->getExtension()); 

      return $this->redirect(['view', 'id' => $model->id]); 
     } 
    } 

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

對於這個工作,你需要在SubContent模型設置適當的驗證規則。

+0

我該怎麼做 –

+0

驗證$ model-> save()是否返回true後應該怎麼做 –

+0

我已經用解決方案更新了答案。 – Bizley