sitegeist / fusionform-upload
Requires
- neos/fusion-form: ^2.1.0
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,这可能在未来的版本中添加 !!!
作者和赞助商
- Martin Ficzel - ficzel@sitegeist.de
此软件包的开发和公共发布得到了我们雇主的大力赞助 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