cmultifileupload 用于上传文件,支持一次同时上传多个文件。这个ui组件是基于jquery multi file upload 插件。yii 内置的很多ui组件都是基于jquery,因此需要创建assets 目录用于存放动态生成的javascripts 等。
所上传的文件的信息可以通过$_files[widget-name]来访问,比如,cmultifileupload的name为”files” 所上传的文件信息可以通过$_files ['files']来访问。此外包含cmultifileupload的form属性需要设置enctype=multipart/form-data。
本例创建 一个upload目录用于存放上传的文件。我们通过配置文件设置中个上传文件导入目录。
修改/config/main.php 添加项目代码
// application-level parameters that can be accessed
// using yii::app()->params['paramname']
'params'=>require(dirname(__file__).'/params.php'),
为application添加一些参数,存放参数的文件为 config/param.php
定义上传文件的目录如下:
// this contains the application parameters that can be
maintained via guireturn array(//upload directory'uploaddir' => 'upload/',);
在代码中可以通过yii::app()->params['uploaddir'] 来访问这个参数,对于这个简单的例子,你也可 以直接使用upload/ 做为固定的常量而无需定义application的参数params。
本例不需使用model,我们定义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 的文件,cmultifileupload可以通过配置定义一些选项,具体可以参考
修改其对应的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目录下的文件,然后将上传的文件存放到该目录下。
以上就是php开发框架yii framework教程(15) ui 组件 multifileupload示例的内容。