2014-03-03 48 views
0

請幫助我。yii在編輯/更新時未在更新表單上設置Cmultifile上傳值

獲取上傳的圖片,同時更新/在警予

編輯在CRUD操作

當我在cmultifile上傳文件做工精細,同時創建和刪除,但我的問題是,該更新過程特定形式。

如果有任何建議保持該下拉字段和Cmultifile中的文件始終基於數據庫值進行設置。

如選擇

請幫我換CMultiFileUpload部件...正從數據庫文件赫斯我的代碼

形式 使用該Widget

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'upload-form', 
    // Please note: When you enable ajax validation, make sure the corresponding 
    // controller action is handling ajax validation correctly. 
    // There is a call to performAjaxValidation() commented in generated controller code. 
    // See class documentation of CActiveForm for details on this. 
    'enableAjaxValidation'=>false, 
    'htmlOptions' => array(
     'enctype' => 'multipart/form-data', 
    ), 
)); ?> 


<?php $this->widget('CMultiFileUpload', 
    array(
     'model'=>$model, 
     'attribute' => 'Document', 
     'accept'=>'jpg|gif|png|doc|docx|pdf', 
     'denied'=>'Only doc,docx,pdf and txt are allowed', 
     'max'=>4, 
     'remove'=>'[x]', 
     'duplicate'=>'Already Selected', 

     ) 
     );?> 

在控制器

public function actionCreate() 

    { 
     $model = new Upload; 
     echo Yii::app()->basePath.'/Images/'; 
     if(isset($_POST['Upload'])) 
     { 
    if($filez=$this->uploadMultifile($model,'Document','/Images/')) 
    { 

    $model->Document=implode(",", $filez); 
    } 
    $model->attributes=$_POST['Upload']; 
    if ($model->save()) 
      { 
       $this->redirect(array('view', 'id' => $model->idUpload)); 
     } 
     } 
     $this->render('create', array(
      'model' => $model, 
     )); 

    } 
//Function for uploading and saving Multiple files 
    public function uploadMultifile ($model,$attr,$path) 
    { 
    /* 
    * path when uploads folder is on site root. 
    * $path='/uploads/doc/' 
    */ 
    if($sfile=CUploadedFile::getInstances($model, $attr)){ 

     foreach ($sfile as $i=>$file){ 

     // $formatName=time().$i.'.'.$file->getExtensionName(); 
     $fileName = "{$sfile[$i]}"; 
      $formatName=time().$i.'_'.$fileName; 
     $file->saveAs(Yii::app()->basePath.$path.$formatName); 
     $ffile[$i]=$formatName; 
     } 
     return ($ffile); 
     } 
    } 
+0

Yii的?代碼請!模型和查看 – lin

+0

添加的表單和控制器的代碼...請幫我CMultiFileUpload – sandeep

+0

「請幫我CMultiFileUpload小部件...從數據庫中選擇文件作爲選擇」:但我不能看到任何「DB-選擇請求「?這個問題代表什麼?你從這邊複製你的解決方案嗎? http://stackoverflow.com/questions/21854460/solved-yii-cmultifileupload-select-multiple-files – lin

回答

0

文件中的字段不同,那麼經典的文本字段......這是因爲文件域不僅在該領域的文件名......但要上傳文件到...你可以把它們想象成他們已連接...因此您無法預先使用文件名填充文件字段。

爲了解釋的工作流程:

  • 用戶輸入一些非有效數據的任何其他字段中,選擇要上載的文件並提交表單
  • 在HTTP協議發送該提交時間togetherwith當時所選擇的文件到服務器
  • 在你的行動,你可以訪問$ _FILE駐留在一些臨時服務器文件夾
  • 現在的文件...如果驗證失敗,你(我們)形式的數據顯示(渲染)輸入表單,在另一個我們正在向客戶端瀏覽器發送一個新表單,以顯示驗證錯誤
  • 以便用戶獲得此新表單,即使您可以預先填充先前選擇的文件名稱...您無法以任何方式預先-populate要上傳的文件內容

有,我能想到

  • 使用AJAX /客戶端驗證,這樣,以確保當表單submited,所有字段將通過幾個解決方案驗證。
  • 使畫面上傳單獨的(這就是爲什麼像論壇的大多數軟件都在一個單獨的形式頭像/資料圖片上傳的原因)

有一些更先進的解決方案,但它們類似於上述第二種方法。 ..比如將整個表單與文件一起上傳,然後在文件被選中時甚至在表單被提交之前用ajax上傳文件...但這是最複雜的並且有更多的想法,因爲用戶可以決定不提交表格,但圖片已上傳。

發佈來源:File Field

我解決了使用JavaScript 追加該記錄的文件,並隱藏在選擇新的文件。 因此按照現在沒有找到完美的解決方案。 赫斯的代碼

顯示檔案

<?php 
        if($model->register_id != Null || $model->register_id != "") 
         { 
          $attribute=CHtml::encode($model->medical_documents); 
          $file = str_getcsv($attribute ,","); 
          ?> <div id="UploadedFiles"> Uploaded Files: <?php 
          foreach($file as $i=> $record) 
          { ?> 
          <div> 
          <span title="File Path :<?php echo Yii::app()->baseURL . "/Documents/" . $file[$i]; ?>"> 
            <?php echo $file[$i];?> 
          </span> 
          </div> 
         <?php } }?>