sitegeist/fusionform-upload

该软件包最新版本(v1.0.1)没有可用的许可证信息。

v1.0.1 2023-05-01 07:22 UTC

This package is auto-updated.

Last update: 2024-08-30 01:49:50 UTC


README

Neos.Fusion.Forms:Upload 的替代实现

该软件包实现了 Fusion.Forms 的文件上传,主要区别在于上传的文件保存在缓存中而不是持久资源中。这的优势在于资源无需手动清理,并在配置的缓存周期后自动删除。

为了实现这一点,该软件包添加了类 \Sitegeist\FusionForm\Upload\Domain\CachedUploadedFile,这是具有额外缓存标识符的 psr-uploaded 文件版本。对于上传多个文件,还添加了集合 \Sitegeist\FusionForm\Upload\Domain\CachedUploadedFileCollection。为这两个类都提供了类型转换器,以确保值被缓存,并恢复先前提交的值以进行处理。

!!! 此软件包目前不支持 RuntimeForm MultiStepProcess,这可能在未来的版本中添加 !!!

作者和赞助商

此软件包的开发和公共发布得到了我们雇主的大力赞助 http://www.sitegeist.de

Fusion 原型 - Sitegeist.FusionForm.Upload:Field.Upload

单个文件上传

原型 Sitegeist.FusionForm.Upload:Field.Upload 允许渲染单个文件字段。它通常与先前上传的文件的渲染一起渲染在字段容器中。提交的值应由接收控制器或运行时表单方案解释为 \Sitegeist\FusionForm\Upload\Domain\CachedUploadedFile

<Neos.Fusion.Form:FieldContainer label="File" field.name="file">

    <!-- show imformations about previously uploaded files -->
    <Neos.Fusion:Fragment @if.has={Type.instance(field.getCurrentValue(), 'Sitegeist\FusionForm\Upload\Domain\CachedUploadedFile')}>
        {field.getCurrentValue().clientFilename} ({field.getCurrentValue().clientMediaType}/{field.getCurrentValue().size})
    </Neos.Fusion:Fragment>

    <!-- the form field -->
    <Sitegeist.FusionForm.Upload:Field.Upload />

</Neos.Fusion.Form:FieldContainer>

相应的方案运行表单可能看起来像这样。

file = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFile')}
requiredFile = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFile').required}
jpgFile = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFile').validator('Sitegeist.FusionForm.Upload:UploadedFile', {'allowedExtensions': ["jpg"]})}

多文件上传

对于多个上传,原型 Sitegeist.FusionForm.Upload:Field.Upload 支持属性 field.multiple。它通常与先前上传的文件的渲染一起渲染在字段容器中。提交的值应由接收控制器或运行时表单方案解释为 \Sitegeist\FusionForm\Upload\Domain\CachedUploadedFileCollection

<Neos.Fusion.Form:FieldContainer label="Files" field.name="files" field.multiple={true}>

    <!-- show imformations about previously uploaded files since we  have a multifield we habe to loop here-->
    <Neos.Fusion:Loop items={field.getCurrentValue()} itemName="item" @if={field.getCurrentValue()}>
        <Neos.Fusion:Fragment @if.has={Type.instance(item, 'Sitegeist\FusionForm\Upload\Domain\CachedUploadedFile')}>
            {item.clientFilename} ({item.clientMediaType} / {item.size}) <br/>
        </Neos.Fusion:Fragment>
    </Neos.Fusion:Loop>
  
    <!-- render input field -->
    <Sitegeist.FusionForm.Upload:Field.Upload />
    
</Neos.Fusion.Form:FieldContainer>

相应的方案运行表单可能看起来像这样。

file = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFileCollection')}
requiredFile = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFileCollection').required}
jpgFile = ${Form.Schema.forType('Sitegeist\\FusionForm\\Upload\\Domain\\CachedUploadedFileCollection').validator('Sitegeist.FusionForm.Upload:UploadedFileCollection', {'allowedExtensions': ["jpg"]})}

在电子邮件中附加上传的文件

由于文件实现了接口 \Psr\Http\Message\UploadedFileInterface,现有的 Email Action 已经可以处理这些类型。

email {
    type = 'Neos.Fusion.Form.Runtime:Email'
    options {
        attachments = Neos.Fusion:DataStructure {
          file = ${data.file} 
        }
    }
}

CachedUploadedFileCollection 可以直接分配给邮件附件。

email {
    type = 'Neos.Fusion.Form.Runtime:Email'
    options {
        attachments = ${data.files.asArray}
    }
}

上传文件缓存

上传的文件持久保存在 Sitegeist_FusionForm_Upload_UploadedFileCache 中,这允许配置替代缓存后端和缓存寿命。

Sitegeist_FusionForm_Upload_UploadedFileCache:
  frontend: Neos\Cache\Frontend\VariableFrontend
  backend: Neos\Cache\Backend\FileBackend
  backendOptions:
    defaultLifetime: 3600
./flow flow:cache:flushone Sitegeist_FusionForm_Upload_UploadedFileCache

安装

Sitegeist.Taxonomy 可通过 Packagist 获取,运行 composer require sitegeist/fusionform-upload 进行安装。

我们使用语义版本控制,因此每次重大更改都会增加主版本号。

贡献

我们非常愿意接受贡献。请向我们发送拉取请求。

许可证

请参阅 LICENSE