Fork me on GitHub

EFileUploadAction

Действие для загрузки файла

Использование

// Добавляем действие в контроллер
public function actions()
{
    return array(
        // ...
        'upload'=>array(
            'class'=>'ext.yiiext.actions.fileUpload.EFileUploadAction',
            // Модель в которой есть файл-атрибут с валидацией.
            // Если указана модель и атрибут, будет сгенерировано имя input-поля.
            'model'=>null,
            // Атрибут в который загружен файл.
            'attribute'=>null,
            // Имя input-поля на странице в который будет загружен файл.
            'name'=>'upload-file',
            // Указывает будет ли скрипт пытаться создать папку загрузки, при ее отсутствии.
            'createDirectory'=>false,
            // Права доступа к создаваемой папке.
            'createDirectoryMode'=>0644,
            // Пытаться ли создать папку рекурсивно.
            'createDirectoryRecursive'=>false,
            // Правило для генерации имени файла. Это php-выражение где $file это загруженный файл.
            // Например 'filenameRule'=>'md5($file->name).".".$file->extensionName',
            'filenameRule'=>null,
            // Имя файла, если не указывать, будет использовано оригинальное.
            'filename'=>null,
            // Путь сохранения файла.
            'path'=>>null,
            'onBeforeUpload'=>function($event)
            {
                // Меняем путь установленный по умолчанию.
                $event->sender->path=Yii::getPathOfAlias('webroot').'/files';
            },
            'onBeforeSave'=>function($event)
            {
                // Можем добавить ошибку и отменить сохранение.
                $event->sender->addError(Yii::t('yiiext','Сохранение отменено!'));
                $event->isValid=false;
            },
            'onAfterSave'=>function($event)
            {
                // Например, создаем превьюшку для картинки.
            }
            'onAfterUpload'=>function($event)
            {
                if($event->sender->hasErrors())
                    // Если есть ошибки покажим их.
                    echo implode(', ',$event->sender->getErrors());
                else
                    // Вернем ссылку на файл.
                    echo str_replace(Yii::getPathOfAlias('webroot'),'',$event->sender->path).'/'.$event->sender->filename;
 
                // Остановим приложение для ajax'а.
                exit;
            }
        ),
        // ...
    );
}

События

Действие имеет 4 события и выполняются в следующем порядке: onBeforeUpload, onBeforeSave, onAfterSave, onAfterUpload. * onBeforeUpload - это событие, в основном предназначено для изменения стандартных настроек действия: путь сохранения, имя файла и др. * onBeforeSave - предназначено для более детальной валидации загруженного файла, то что нельзя сделать средствами модели. В этом событии можно отменить сохранение файла, установив $event->isValid=false * onAfterSave - событие предназначенное для манипуляции с уже сохраненым файлом. * onAfterUpload - в этом событии предлагается проверять загрузился, сохранился или нет. И показать ошибки.

Changelog

0.3 [+] Add getErrors(), hasErrors(), addError() method. (Veaceslav Medvedev) [+] Add onBeforeUpload and onAfterUpload event. Details in readme.txt (Veaceslav Medvedev) [*] Event onBeforeSave can cancel process and file do not be save. (Veaceslav Medvedev) [-] Remove setter and getter to path and filename. (Veaceslav Medvedev)

0.2

Warning: this version is not backwards compatible to 0.1.

[*] Add setter and getter to path and filename. Now you can change it from beforeSave event. (Veaceslav Medvedev) [-] Delete property exitOnAjax. You can stop appliaction via event. (Veaceslav Medvedev)

0.1

[+] Initial public release (Veaceslav Medvedev)

Action for file uploads handling.

Documentation

Downloads (Tags)

Resources