鍍金池/ 教程/ PHP/ Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例
Yii Framework 開發(fā)教程(16) UI 組件 StarRating 示例
Yii Framework 開發(fā)教程(2) Yii Web 應(yīng)用基礎(chǔ)
Yii Framework 開發(fā)教程(19) UI 組件 TreeView 示例
Yii Framework 開發(fā)教程(39) Zii 組件-Slider 示例
Yii Framework 開發(fā)教程(45) Zii 組件-Selectable 示例
Yii Framework 開發(fā)教程(44) Zii 組件-Resizable 示例
Yii Framework 開發(fā)教程(8) 使用 FormModel
Yii Framework 開發(fā)教程(42) Zii 組件-Draggable 示例
Yii Framework 開發(fā)教程(18) UI 組件 TextHighlighter 示例
Yii Framework 開發(fā)教程(32) Zii 組件-GridView 示例
Yii Framework 開發(fā)教程(30) Zii 組件-ListView 示例
Yii Framework 開發(fā)教程(9) UI 組件 Widget 概述
Yii Framework 開發(fā)教程(17) UI 組件 TabView 示例
Yii Framework 開發(fā)教程(24) 數(shù)據(jù)庫-DAO 示例
Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例
Yii Framework 開發(fā)教程(21) UI 組件 自定義 Captcha 示例
Yii Framework 開發(fā)教程(38) Zii 組件-ProgressBar 示例
Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例
Yii Framework 開發(fā)教程(14) UI 組件 MaskedTextField 示例
Yii Framework 開發(fā)教程(22) UI 組件 Zii 組件簡介
Yii Framework 開發(fā)教程(31) Zii 組件-DetailView 示例
Yii Framework 開發(fā)教程(33) Zii 組件-Accordion 示例
Yii Framework 開發(fā)教程(36) Zii 組件-DatePicker 示例
Yii Framework 開發(fā)教程(6) CComponent 組件
Yii Framework 開發(fā)教程(37) Zii 組件-Dialog 示例
Yii Framework 開發(fā)教程(26) 數(shù)據(jù)庫-Active Record 示例
Yii Framework 開發(fā)教程(29) Zii組件-Menu 示例
Yii Framework 開發(fā)教程(46) Zii 組件-Sortable 示例
Yii Framework 開發(fā)教程(10) UI 組件 自定義組件
Yii Framework 開發(fā)教程(11) UI 組件 ActiveForm 示例
Yii Framework 開發(fā)教程(43) Zii 組件-Droppable 示例
Yii Framework 開發(fā)教程(27) 數(shù)據(jù)庫-關(guān)聯(lián) Active Record 示例
Yii Framework 開發(fā)教程(47) 主題 Theme 示例
Yii Framework 開發(fā)教程(48) 多國語言示例
Yii Framework 開發(fā)教程(35) Zii 組件-Button 示例
Yii Framework 開發(fā)教程(3) 為應(yīng)用添加日志
Yii Framework 開發(fā)教程(23) 數(shù)據(jù)庫-概述
Yii Framework 開發(fā)教程(12) UI 組件 ClipWidget 示例
Yii Framework 開發(fā)教程(41) Zii 組件-Tabs 示例
Yii Framework 開發(fā)教程(34) Zii 組件-AutoComplete 示例
Yii Framework 開發(fā)教程(40) Zii 組件-SliderInput 示例
Yii Framework 開發(fā)教程(5) URL 管理
Yii Framework 開發(fā)教程(4) Hangman 猜單詞游戲?qū)嵗?/span>
Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例
Yii Framework 開發(fā)教程(7) 使用 CHtml 創(chuàng)建 Form
Yii Framework 開發(fā)教程(28) Data Provider 簡介
Yii Framework 開發(fā)教程(1) 第一個應(yīng)用 Hello World
Yii Framework 開發(fā)教程(13) UI 組件 ContentDecorator 示例

Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例

CMultiFileUpload 用于上傳文件,支持一次同時上傳多個文件。這個 UI 組件是基于 jQuery Multi File Upload 插件。Yii 內(nèi)置的很多 UI 組件都是基于 JQuery,因此需要創(chuàng)建 assets 目錄用于存放動態(tài)生成的 javascripts 等。

所上傳的文件的信息可以通過$_FILES[widget-name]來訪問,比如,CMultiFileUpload 的 name 為”files” 所上傳的文件信息可以通過$_FILES[‘files’]來訪問。此外包含 CMultiFileUpload 的 Form 屬性需要設(shè)置 enctype=multipart/form-data。

本例創(chuàng)建一個 upload 目錄用于存放上傳的文件。我們通過配置文件設(shè)置中個上傳文件導(dǎo)入目錄。

修改/config/main.php 添加項(xiàng)目代碼


    // application-level parameters that can be accessed
    // using Yii::app()->params['paramName']
    'params'=>require(dirname(__FILE__).'/params.php'),

為 Application 添加一些參數(shù),存放參數(shù)的文件為 config/param.php

定義上傳文件的目錄如下:


    // this contains the application parameters that can be maintained via GUI
    return array(

    //upload directory
    'uploadDir' => 'upload/',
    );

在代碼中可以通過 Yii::app()->params[‘uploadDir’] 來訪問這個參數(shù),對于這個簡單的例子,你也可以直接使用 upload/ 做為固定的常量而無需定義 Application 的參數(shù) params.

本例不需使用 Model,我們定義 View 如下:


    <div class="form">
    <?php $form=$this->beginWidget('CActiveForm',array(

        'method' =>'post',
        'htmlOptions'=>array('enctype'=>'multipart/form-data'),

        )); ?>

       <?php $this->widget('CMultiFileUpload',array(
        'name'=>'files',
        'accept'=>'jpg|png',
        'max'=>3,
        'remove'=>'Remove',
        //'denied'=>'', message that is displayed when a file type is not allowed
        //'duplicate'=>'', message that is displayed when a file appears twice
        'htmlOptions'=>array('size'=>25),
       )); ?>

        <div class="row submit">
        <?php echo CHtml::submitButton('Upload'); ?>
        </div>

    <?php $this->endWidget(); ?>
    </div><!-- form -->

    <ul>
    <?php foreach($this->findFiles() as $filename): ?>
        <li><?php echo CHtml::link($filename,
                Yii::app()->baseUrl.'/'.Yii::app()->params['uploadDir'].$filename,
        array('rel'=>'external'));?></li>
    <?php endforeach; ?>
    </ul>

使用 CMultiFileUpload 上傳擴(kuò)展名為 jpg|png 的文件,CMultiFileUpload 可以通過配置定義一些選項(xiàng),具體可以參考

修改其對應(yīng)的 Controller/Action。


    class SiteController extends CController
    {
        /**
         * Index action is the default action in a controller.
         */
        public function actionIndex()
        {

            if(isset($_FILES['files']))
            {
                // delete old files
                foreach($this->findFiles() as $filename)
                    unlink(Yii::app()->params['uploadDir'].$filename);

                //upload new files
                foreach($_FILES['files']['name'] as $key=>$filename)
                    move_uploaded_file($_FILES['files']['tmp_name'][$key],
                    Yii::app()->params['uploadDir'].$filename);
            }
            $this->render('index');
        }

        /**
         * @return array filename
         */
        public function findFiles()
        {
            return array_diff(scandir(Yii::app()->params['uploadDir']),
            array('.', '..'));
        }
    }

Action 方法首先刪除 upload 目錄下的文件,然后將上傳的文件存放到該目錄下。

http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/15.1.jpg" alt="picture15.1" />

本例下載