alex-dwt / file
此包已被废弃,不再维护。未建议替代包。
此包的最新版本(0.2.3)没有可用的许可证信息。
为Yii2应用提供文件逻辑。将文件作为简单的模型属性进行操作。
0.2.3
2015-10-20 06:06 UTC
Requires
- bower-asset/blueimp-file-upload: *
- flexibuild/component: *
- yiisoft/yii2: *
- yiisoft/yii2-imagine: *
- yiisoft/yii2-jui: *
README
Yii2扩展,允许将文件作为简单属性进行操作。
优点
-
像其他简单属性一样使用文件。
-
存储逻辑是独立的,可以更改而无需更改您的控制器或视图。
-
格式化逻辑是独立的。对于每个文件,您都可以定义格式化器。这些格式化器允许生成和使用格式化版本的文件。为图像添加了有用的水印、缩略图、灰度和其他格式化器。
-
有用地获取源文件或格式化版本的URL。
-
文件存储允许保存原始文件名。
-
为默认文件URL(用于占位符URL)提供了有用的配置。
-
您可以使用具有最小应用程序配置的AJAX文件上传器。
安装
安装此扩展的首选方式是通过composer。
运行以下命令:
php composer.phar require --prefer-dist "flexibuild/file *"
或者
"flexibuild/file": "*"
将其添加到您的composer.json文件的require部分。
使用方法
在ContactForm模型中对头像字段使用示例
- 在您的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',
//],
],
],
// ...
- 将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
* ...
*/
- 为了通过'setAttributes()'方法更改'avatarFile',您必须添加一些规则或编辑您的scenarios()方法。以下是一个使用'rules()'方法的示例
public function rules()
{
return [
// ...
['avatarFile', 'file'/*, 'skipOnEmpty' => false */],
// ...
];
}
- 在您的视图文件中使用以下之一:\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(); ?>
- 为了使用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'],
]) ?>
- 您不仅可以在表单中使用新的文件属性。在其他视图中,您还可以
<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对象以获取更多信息。