How to upload a file using a model

You are viewing revision #1 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.

next (#2) »

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'); ?>
...
</form>
66 4
64 followers
Viewed: 519 742 times
Version: Unknown (update)
Category: Tutorials
Written by: qiang
Last updated by: samdark
Created on: Feb 4, 2009
Last updated: 9 years ago
Update Article

Revisions

View all history

Related Articles