Skip to content
Yii2 tools for upload file
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
assets/js
migrations
Bootstrap.php
CHANGELOG.md
CropAsset.php
CropImage.php
FileController.php
FileModel.php
ImageController.php
LICENSE
README.md
UploadBehavior.php
UploadImage.php
composer.json

README.md

Yii2 Upload File

Yii2 tools for upload file

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require mdmsoft/yii2-upload-file "~2.0"

for dev-master

php composer.phar require mdmsoft/yii2-upload-file "dev-master"

or add

"mdmsoft/yii2-upload-file": "~2.0"

to the require section of your composer.json file.

Usage

Once the extension is installed. Prepare required table by execute yii migrate.

yii migrate --migrationPath=@mdm/upload/migrations

if wantn't use db migration. you can create required table manually.

CREATE TABLE uploaded_file (
    "id" INT NOT NULL AUTO_INCREMENT,
    "name" VARCHAR(64),
    "filename" VARCHAR(256),
    "size" INT,
    "type" VARCHAR(32),
    PRIMARY KEY (id)
);

Modify your application configuration as follows:

return [
    ...
    'controllerMap' => [
        'file' => 'mdm\\upload\\FileController', // use to show or download file
    ],
];

Then simply modify your Model class:

public function behaviors()
{
	return [
        ...
		[
			'class' => 'mdm\upload\UploadBehavior',
			'attribute' => 'file', // required, use to receive input file
			'savedAttribute' => 'file_id', // optional, use to link model with saved file.
			'uploadPath' => '@common/upload', // saved directory. default to '@runtime/upload'
            'autoSave' => true, // when true then uploaded file will be save before ActiveRecord::save()
            'autoDelete' => true, // when true then uploaded file will deleted before ActiveRecord::delete()
		],
	];
}

You dont need add extra attribute file to model class. In controller

public function actionCreate()
{
    if($model->load(Yii::$app->request->post()) && $model->save()){
        ...
    }
    ...
}

If you set mdm\upload\UploadBehavior::$autoSave to false you must call saveUploadedFile().

public function actionCreate()
{
    if($model->load(Yii::$app->request->post()) && $model->validate()){
        if($model->saveUploadedFile() !== false){
            $model->save(false);
            ....
        }
        ...
    }
    ...
}

In view file

// in create or update view
<?= $form->field($model,'file')->fileInput(); ?>


// in view
<?= Html::img(['/file','id'=>$model->file_id]) ?>
<!-- assume the uploaded file is image ->

Using Without Attach Behavior

Instead of using as behavior, you can also directly save file using FileModel.

public function actionCreate()
{
    ...
    if($model->load(Yii::$app->request->post()) && $model->validate()){
        $file = UploadedFile::getInstance($model, 'file');
        if($fileModel = FileModel::saveAs($file,['uploadPath' => '@common/upload'])){
            $model->fil_id = $fileModel->id;
            $model->save();
            ....
        }
        ...
    }
    
}

But, you need to add attribute file to Model.

class MyModel extend ...
{
    public $file; // add this to your model class
You can’t perform that action at this time.