如何使用model上传一个文件 [ 未指定版本 ]
首先在模型类声明一个属性来储存文件名称(form model或active record model均可)。同样声明一个文件验证规则,以确保被上传文件指定的扩展名。
class Item extends CActiveRecord
{
public $image;
// ... other attributes
public function rules()
{
return array(
array('image', 'file', 'types'=>'jpg, gif, png'),
);
}
}
然后,在控制器类定义一个action方法收集用户提交的数据。
class ItemController extends CController
{
public function actionCreate()
{
$model=new Item;
if(isset($_POST['Item']))
{
$model->attributes=$_POST['Item'];
$model->image=CUploadedFile::getInstance($model,'image');
if($model->save())
{
$model->image->saveAs('path/to/localFile');
// redirect to success page
}
}
$this->render('create', array('model'=>$model));
}
}
最后,创建action视图并生成一个上传的field。
<?php echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>
...
<?php echo CHtml::activeFileField($model, 'image'); ?>
...
<?php echo CHtml::endForm(); ?>
╃巡洋艦㊣ 北京
注册时间:2010-11-21
最后登录:5小时前
在线时长:1674小时13分
最后登录:5小时前
在线时长:1674小时13分
- 粉丝1369
- 金钱76368
- 威望845
- 积分101558
共 6 条评论
在View中的File的name是image,但是在控制器中国的post为何是Item呢?
在yii 中是以数组形式上传的
$Item['image'];
CUploadedFile
是官方上传类?其实这个上传的难点在写入数据库
model就直接save了?image属性是个对象就save了?
这样save进去的是一个文件名还是这个文件本身?