How to upload a file using a model

66 4
64
Viewed: 534 033 times
Version: Unknown (update)
Category: Tutorials
Written by: qiang qiang
Updated by: samdark samdark
Created: Feb 4, 2009
Updated: 11 years ago

You are viewing revision #8 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version or see the changes made in this revision.

« previous (#7)next (#9) »

First declare an attribute to store the file name in the model class (either a form model or an active record model). Also declare a file validation rule for this attribute to ensure a file is uploaded with specific extension name.

class Item extends CActiveRecord
{
	public $image;
	// ... other attributes

	public function rules()
	{
		return array(
			array('image', 'file', 'types'=>'jpg, gif, png'),
		);
	}
}

Then, in the controller class define an action method to render the form and collect user-submitted data.

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));
	}
}

Finally, create the action view and generate a file upload field.

<?php echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>
...
<?php echo CHtml::activeFileField($model, 'image'); ?>
...
<?php echo CHtml::endForm(); ?>
Links