oleg-chulakov-studio / yii2-fileinput
基于Krajee (kartik-v)高级文件输入小部件,没有ajax文件删除功能
Requires
- php: >=5.6.0
- kartik-v/yii2-widget-fileinput: ~1.0.0
- oleg-chulakov-studio/yii2-filestorage: ^1.1
- yiisoft/yii2: ~2.0.16
This package is auto-updated.
Last update: 2024-09-21 01:19:40 UTC
README
覆盖Krajee File Input小部件。通过隐藏字段实现文件删除逻辑,不使用AJAX。使用特殊行为简化FileInput小部件的配置。实现文件小部件的方便的AJAX排序。
使用方法
文件上传
<?php $form = ActiveForm::begin([ 'options' => ['enctype' => 'multipart/form-data'] ]); ?> ... <?= $form->field($model, 'images[]')->widget(\chulakov\fileinput\widgets\FileInput::className(), [ 'options' => [ 'multiple' => true ], 'pluginOptions' => [ 'initialPreview' => $model->getImagesInitial(), 'initialPreviewConfig' => $model->getImagesInitialConfig(), 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ], ... ]); ?> ... <div class="form-group"> <?= Html::submitButton(Save, ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?>
在文件小部件中更改文件顺序(排序)
为了使排序工作,在配置小部件时需要设置参数sortActionRoute
。该参数包含指向AJAX操作的路径,该操作直接更改文件顺序。如果设置了此参数,将自动出现拖动图标。
顺序更改机制与sem-soft/yii-sortable包的工作机制完全兼容。可以使用此包进行文件排序。下面是示例配置,说明如何共同配置小部件和后端排序。
<?php $form = ActiveForm::begin([ 'options' => ['enctype' => 'multipart/form-data'] ]); ?> ... <?= $form->field($model, 'images[]')->widget(FileInput::className(), [ 'options' => [ 'multiple' => true ], // !!! 'sortActionRoute' => ['swap'], // --- 'pluginOptions' => [ 'initialPreview' => $model->getImagesInitial(), 'initialPreviewConfig' => $model->getImagesInitialConfig(), 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ], ... ]); ?> ... <div class="form-group"> <?= Html::submitButton(Save, ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?>
安装sem-soft / yii-sortable包后,需要配置相应控制器中的swap
操作。
<?php ... use sem\sortable\actions\DragDropMoveAction; use Yii; ... class SliderController extends Controller { ... public function actions() { return [ ... 'swap' => [ 'class' => DragDropMoveAction::class, 'modelClass' => Image::class, ], ... ]; } }
还需要连接一个行为,该行为将在插入新记录时设置下一个sort
字段的值。
<?php ... use Yii; use sem\sortable\behaviors\SortAttributeBehavior; ... class Image extends ActiveRecord { ... public function rules() { return [ ... [['sort'], 'number'], ... ]; } ... public function behaviors() { return [ ... SortAttributeBehavior::class, ... ]; } }
更多详细信息可以在sem-soft / yii-sortable包的说明中找到。
通过行为获取预览信息
可以通过行为减少配置FileInput
小部件以准备先前上传的文件缩略图的时间。前提是使用yii2-filestorage组件来管理文件。
FileModelBehavior
行为为表单模型添加了两个方法getInitialPreview
和getInitialPreviewConfig
。这两个方法都接收参数attribute
,指示包含已上传文件实体的表单字段的名称,用于在文件小部件中构建预览信息。
如果满足以下条件,小部件将在初始化时自动调用这些方法:
- 基于ActiveForm构建的表单
- 在配置小部件时未设置
initialPreview
,initialPreviewConfig
参数的pluginOptions
键 - 在配置小部件时设置了参数
attachedFilesAttribute
,该参数指示包含已上传文件实体的表单字段的名称 - 已将
\chulakov\fileinput\behaviors\FileModelBehavior
行为连接到表单模型
FileInput
小部件的配置示例
<?= $form->field($model, 'images[]')->widget(\chulakov\fileinput\widgets\FileInput::className(), [ 'options' => [ 'multiple' => true ], 'sortActionRoute' => ['swap'], // !!!! 'attachedFilesAttribute' => 'imagesAttached', // ---- 'pluginOptions' => [ 'overwriteInitial' => false, 'showUpload' => false, 'showClose' => false, 'showRemove' => false, 'fileActionSettings' => [ 'showRemove' => true, ], ] ]); ?>
FileModelBehavior
行为连接到表单模型。不需要对此行为进行额外配置。
... class GalleryForm extends \yii\base\Model { ... /** * @inheritdoc */ public function behaviors() { return [ ... [ 'class' => \chulakov\fileinput\behaviors\FileModelBehavior::class, ] ]; } ... }
附加信息
- 获取文件所有者标识符的行为FileOwnerBehavior