punktde/form-persistence

提供表单完成器,用于将表单数据保存到数据库,并提供后端模块以下载数据。

安装量: 15,512

依赖项: 0

建议者: 0

安全: 0

星标: 6

关注者: 6

分支: 7

开放性问题: 11

类型:neos-package


README

Latest Stable Version Total Downloads License

特性

  • 持久化完成器,将表单数据持久化到您的数据库中。
  • 它还提供了一个用于以不同格式下载数据的后端模块。
  • 一个导出定义编辑器允许您定义自定义导出定义。
  • 数据可以通过电子邮件定期汇总发送
  • 可以配置保留策略以遵守数据隐私策略
  • 可以通过网站或内容维度限制对数据的访问
  • 表单数据通过表单标识符和表单字段标识符的哈希值的组合进行聚合,以避免在表单更改时发生冲突

Backend Module

安装

composer require punktde/form-persistence

安装成功后,运行./flow doctrine:migrate初始化数据库表。

配置

排除要保存的表单类型

某些表单类型仅用于结构化表单或显示静态文本,不应可用于导出。现在可以使用可扩展配置排除这些表单类型。

PunktDe:
  Form:
    Persistence:
      finisher:
        excludedFormTypes:
          'Neos.Form:StaticText': true

导出定义

静态导出定义可以通过设置定义。

fileNamePattern:

示例:Form-Export-{formIdentifier}-{currentDate}.csv

以下变量可以使用:

  • formIdentifier
  • formVersionHash
  • currentDate
  • exportDefinitionIdentifier

处理器链

表单数据处理步骤在processorChain配置中定义。此链目前用于所有导出。您可以使用位置数组拆分语法添加自己的处理器,以定义其在链中的位置。

示例

PunktDe:
  Form:
    Persistence:
      processorChain:
        # My processor
        myProcessor:
          class: 'Vendor\FormProcessors\MyProcessor'
          position: end

权限

表单数据可能包含敏感数据。因此,此包提供了权限,以授予后端用户单独的访问权限。

网站权限

在多站点环境中,您可以使用PunktDe\Form\Persistence\Authorization\Privilege\SitePrivilege根据网站限制对表单数据的访问。在Policy.yaml中添加

'PunktDe\Form\Persistence\Authorization\Privilege\SitePrivilege':
  'PunktDe.Form.Persistence:Sites.All':
    label: Access to form data of all sites
    matcher: '*'

'PunktDe.Form.Persistence:Sites.MyFirstSite':
  label: Access to form data of site my-site
  matcher: 'my-site'

匹配器接受,'*',一个名称或逗号分隔的站点名称列表。

维度权限

在多维度环境中,您可以使用PunktDe\Form\Persistence\Authorization\Privilege\SitePrivilege根据内容维度组合限制对表单数据的访问。在Policy.yaml中添加

'PunktDe\Form\Persistence\Authorization\Privilege\ContentDimensionPrivilege':
  'PunktDe.Form.Persistence:Dimensions.All':
    label: Access to form data of all content dimensions
    matcher: '*'

'PunktDe.Form.Persistence:Dimensions.Germany':
  label: Access to form data of all langues in the german country
  matcher: '{"country": ["deu"]}'

匹配器接受'*'或维度的json定义。有关详细信息,请参阅ContentDimensionPrivilegeTargetTest.php

使用方法

添加SaveFormDataFinisher

使用流表单配置

type: 'Neos.Form:Form'
identifier: 'my-form'
renderables:
    ...

finishers:
  saveFormData:
    identifier: 'PunktDe.Form.Persistence:SaveFormDataFinisher'

使用Neos表单构建器

需要建议的包neos/form-builder,并将保存表单数据完成器添加到neos后端中的基于节点的表单。

计划导出

您的表单数据导出可以定期发送到特定的电子邮件地址。可以在完成器中直接配置电子邮件地址和导出定义。要触发导出,需要调用命令formPersistence:sendExport

后端模块

下载表单数据

提供了一个简单的后端模块,可以将表单数据以多种格式下载,如CSV、Excel和Html。以下是可能的格式列表 https://phpspreadsheet.readthedocs.io/en/latest/。表单版本指定了使用的字段及其位置。因此,当表单随时间变化时,将生成具有一致标题和列位置的单独CSV或Excel文件。

Backend Module

定义导出定义

该软件包提供了一个图形编辑器来定义导出定义。通过导出定义,您可以定义要添加到导出的字段及其名称。

Backend Module

清理旧表单数据

要手动清理旧表单数据或定期清理,需要配置保留期并调用命令 formpersistence:cleanupformdata。在以下示例中,配置了30天的保留期,因此每次调用该命令时,都会删除30天前的所有旧表单数据条目。

PunktDe:
  Form:
    Persistence:
      formDataCleanup:
        retentionPeriod: 'P30D'

整个功能封装在一个服务中,以允许更好地集成到不同的方法中,以定期执行此功能,例如使用调度程序或队列工作流。

开发软件包

导出定义编辑器

使用React应用

要开始修改导出定义应用,请转到文件夹 PunktDe.Form.Persistence/Resources/Public/ExportDefinitionEditorApp 并运行以下命令:

yarn install

安装所有依赖项后,您可以根据需要调整React应用的代码。它使用create-react-app脚手架工具创建,因此使用了其构建配置并进行了一些调整。要查看更改,您需要使用以下命令构建应用。

yarn build

生成的文件 main.js 位于文件夹 build/static/js 中。此文件在Neos后端中加载,是您看到的编辑器。

使用PHPStan运行测试

分析整个项目

vendor/bin/phpstan analyse -c phpstan.neon

分析特定文件

vendor/bin/phpstan analyse Classes/Path/To/File.php