CMultiFileUpload はファイルのアップロードに使用され、一度に複数のファイルのアップロードをサポートします。この UI コンポーネントは、jQuery Multi File Upload プラグインに基づいています。 Yii の組み込み UI コンポーネントの多くは JQuery に基づいているため、動的に生成された JavaScript などを保存するためのアセット ディレクトリを作成する必要があります。
アップロードされたファイル情報は、$_FILES[widget-name] を通じてアクセスできます。たとえば、CMultiFileUpload の名前は「files」で、アップロードされたファイル情報は $_FILES['files'] を通じてアクセスできます。さらに、CMultiFileUpload を含む Form 属性には enctype=multipart/form-data を設定する必要があります。
この例では、アップロードされたファイルを保存するアップロード ディレクトリを作成します。構成ファイル設定を通じて、アップロードされたファイルをディレクトリにインポートします。
/config/main.phpを変更してプロジェクトコードを追加します
// application-level parameters that can be accessed // using Yii::app()->params['paramName'] 'params'=>require(dirname(__FILE__).'/params.php'),
パラメータを保存するファイルはconfig/param.phpです
ファイルをアップロードするディレクトリを次のように定義します:
// this contains the application parameters that can be maintained via GUIreturn array(//upload directory'uploadDir' => 'upload/',);
コード::app()->params['uploadDir'] で Yii を使用して、このパラメータにアクセスできます。この簡単な例では、アプリケーション パラメータの params を定義せずに、upload/ を固定定数として直接使用することもできます。
この例では、View を次のように定義します:
beginWidget('CActiveForm',array('method' =>'post','htmlOptions'=>array('enctype'=>'multipart/form-data'),)); ?> 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),)); ?>endWidget(); ?> findFiles() as $filename): ?> Yii::app()->baseUrl.'/'.Yii::app()->params['uploadDir'].$filename,array('rel'=>'external'));?>
CMultiFileUpload を使用して、拡張子 jpg|png のファイルをアップロードします。詳細については、
を参照してください。対応するコントローラー/アクションを変更します。
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 メソッドは、まずアップロード ディレクトリ内のファイルを削除し、次にアップロードされたファイルをこのディレクトリに保存します。
上記は、PHP 開発フレームワーク Yii Framework チュートリアル (15) UI コンポーネント MultiFileUpload の例の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。