alex-dwt/file

此包已被废弃,不再维护。未建议替代包。
此包的最新版本(0.2.3)没有可用的许可证信息。

为Yii2应用提供文件逻辑。将文件作为简单的模型属性进行操作。

维护者

详细信息

github.com/alex-dwt/file

主页

源代码

安装: 175

依赖者: 0

建议者: 0

安全: 0

星级: 0

观察者: 1

分支: 2

类型:yii2-extension

0.2.3 2015-10-20 06:06 UTC

This package is auto-updated.

Last update: 2020-01-19 12:23:41 UTC


README

Yii2扩展,允许将文件作为简单属性进行操作。

优点

  1. 像其他简单属性一样使用文件。

  2. 存储逻辑是独立的,可以更改而无需更改您的控制器或视图。

  3. 格式化逻辑是独立的。对于每个文件,您都可以定义格式化器。这些格式化器允许生成和使用格式化版本的文件。为图像添加了有用的水印、缩略图、灰度和其他格式化器。

  4. 有用地获取源文件或格式化版本的URL。

  5. 文件存储允许保存原始文件名。

  6. 为默认文件URL(用于占位符URL)提供了有用的配置。

  7. 您可以使用具有最小应用程序配置的AJAX文件上传器。

安装

安装此扩展的首选方式是通过composer

运行以下命令:

php composer.phar require --prefer-dist "flexibuild/file *"

或者

"flexibuild/file": "*"

将其添加到您的composer.json文件的require部分。

使用方法

在ContactForm模型中对头像字段使用示例

  1. 在您的cfg文件中添加contextManager应用程序组件配置
    // ...
    'contextManager' => [
        'class' => 'flexibuild\file\ContextManager',
        'contexts' => [
            /* context name => [context config] */
            'contact' => [
                'class' => 'flexibuild\file\contexts\ImageContext',
                //'defaultFormatter' => ['image/watermark', 'filename' => '@app/data/menus.png'], // example of default watermark
                //'storage' => [
                //    'class' => 'flexibuild\file\storages\FileSystemStorage', // default storage
                //],
                //'formatters' => [ // examples of formatters
                //    'small' => ['image/thumb', 'width' => 200, 'height' => 200],
                //    'mini' => ['from', 'from' => 'small', 'formatter' => ['image/thumb', 'width' => 100]],
                //    'pixel' => ['from', 'from' => 'mini', 'formatter' => ['image/thumb', 'height' => 10]],
                //    'temp1' => ['image/thumb', 'width' => 100],
                //],
                //'fileConfig' => [ // example of customizing File objects
                //    'on cannotGetUrl' => 'flexibuild\file\events\CannotGetUrlHandlers::formatFileOnFly',
                //],
            ],
        ],
    // ...
  1. 将flexibuild\file\ModelBehavior添加到您的模型中。例如,您在模型中有一个$avatar属性。
    // ...
    public function behaviors()
    {
        return [
            'fileModelBehavior' => [
                'class' => \flexibuild\file\ModelBehavior::className(),
                'attributes' => [
                    // add 'avatarFile' attribute that will be linked with 'avatar' property
                    // and use 'contact' context
                    'avatar' => 'contact',
                ],
            ],
        ];
    }
    // ...

之后,您的模型具有属性'avatarFile'。其类型为\flexibuild\file\File对象。为了更好地与IDE兼容,我们建议在您的模型PHPDoc中添加此属性。

/*
 * ...
 * @property \flexibuild\file\File $avatarFile
 * ...
 */
  1. 为了通过'setAttributes()'方法更改'avatarFile',您必须添加一些规则或编辑您的scenarios()方法。以下是一个使用'rules()'方法的示例
    public function rules()
    {
        return [
            // ...
            ['avatarFile', 'file'/*, 'skipOnEmpty' => false */],
            // ... 
        ];
    }
  1. 在您的视图文件中使用以下之一:\flexibuild\file\widgets\SimpleFileInput 或 \flexibuild\file\widgets\BlueimpJQueryUploader小部件。您可以使用ActiveFormEx或ActiveFieldEx(或FieldFileInputsTrait)以获得更大的便利性。
    <?php
        use flexibuild\file\widgets\bootstrap\ActiveFormEx;
        // or flexibuild\file\widgets\ActiveFormEx without using bootstrap
    ?>
    <!-- ... -->

    <?php $form = ActiveFormEx::begin([/* ... */]); ?>
    <!-- ... -->

    <?= $form->field($model, 'avatarFile')->fileInput([
        // custom widget options
    ]) ?>

    <!-- ... -->
    <?php ActiveFormEx::end(); ?>
  1. 为了使用AJAX文件上传器,您必须在控制器映射中添加上传操作。为此,您可以在控制器中使用flexibuild\file\web\UploadAction或使用flexibuild\file\web\UploadController与上下文配置。
    // ...
    'controllerMap' => [
        'file' => [
            'class' => 'flexibuild\file\web\UploadController',
            'contexts' => [
                'contact',
            ],
        ],
    ],
    // ...

之后,您可以使用AJAX jQuery上传器而不是SimpleFileInput

    <?= \flexibuild\file\widgets\BlueimpJQueryUploader::widget([
        'model' => $model,
        'attribute' => 'avatarFile',
        'url' => ['file/upload-contact'],
    ]) ?>

或者

    <?= $form->field($model, 'avatarFile')->fileBlueimpUploader([
        'url' => ['file/upload-contact'],
    ]) ?>
  1. 您不仅可以在表单中使用新的文件属性。在其他视图中,您还可以
    <a href="<?= Html::encode($model->avatarFile) ?>"><?= Html::encode($model->name) ?></a>
    <a href="<?= Html::encode($model->avatarFile->asMini) ?>"><?= Html::encode($model->name) ?></a>
    <a href="<?= Html::encode($model->avatarFile->getUrl('small', 'https') ?>"><?= Html::encode($model->name) ?></a>
    <p>size: <?= $model->avatarFile->size ?></p>

查看\flexibuild\file\File对象以获取更多信息。