punktde/form-persistence

提供表单完成器以将表单数据保存到数据库,以及一个后端模块以下载数据。

安装数量: 15,454

依赖项: 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

使用 flow 表单配置

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应用程序的代码。该应用程序使用creat-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