unique/yii2-files

Allows to easily add file upload functionality in Yii2 framework

Maintainers

Package info

github.com/uniquexor/yii2-files

Type:yii2-extension

pkg:composer/unique/yii2-files

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-04-20 21:07 UTC

This package is auto-updated.

Last update: 2026-04-20 21:07:41 UTC


README

An easy to use api File upload with a model class.

Installation

The preferred way to install this extension is through composer.

Either run

composer require unique/yii2-files

or add

"unique/yii2-files": "@dev"

to the require section of your composer.json file.

To create DB tables run migration file:

./yii migrate --migrationPath="vendor/unique/yii2-files/src/migrations"

or add to your config file:

        'controllerMap' => [
            'migrate' => [
                'class' => 'yii\console\controllers\MigrateController',
                'migrationNamespaces' => [
                    'unique\\yii2files\\migrations',
                ]
            ],
        ]

Usage

In order to use the behavior, you first need to load the module. Module can only be loaded once. Add the following to your config file:

<?php
    [
        'bootstrap' => [ 
            // ...,
            'files' 
        ],
        // ...
        'modules' => [
            'files' => [
                'class' => \unique\yii2files\FilesModule::class,
                
                // Defines an alias friendly path, where to store all uploaded files
                'uploads_path' => '@app/www/uploads/files',
            ],
            // ...
        ]   
    ]
?>

Then use UploadAction in your api controller, for example:

    class FilesController extends \yii\rest\Controller {
    
        public function actions(){
            
            return array_merge( parent::actions(), [
                'class' => \unique\yii2files\UploadAction::class,
            ] );
        }
    }

Now, you can use something like uppy to easily upload files:

<template>
    <uppy-context-provider :uppy="uppy">
        <Dropzone />
    </uppy-context-provider>
</template>

<script>
    export default defineComponent( {
        computed: {
            uppy() {
                return new Uppy( {
                    restrictions: { maxNumberOfFiles: 1 }
                } )
                        .use( XHR, {
                            endpoint: this.$url( '/api/files/upload' ),
                        } )
                        .on( 'upload-success', ( file, response ) => {
                            console.log( file, response );
                            
                            // All File model fields:
                            response.body;
                        } );
            },
        }
    } )
</script>