sst/survey-lib-bundle

调查问卷的Symfony扩展包

安装次数: 484

依赖者: 0

建议者: 0

安全: 0

星标: 4

关注者: 1

分支: 2

公开问题: 0

类型:symfony-bundle

2.1.0 2024-08-19 10:16 UTC

This package is auto-updated.

Last update: 2024-09-19 10:35:28 UTC


README

此扩展包为Symfony项目提供了一个调查相关实体和服务库。

许可证

此扩展包由SST软件开发,有关详细信息,请参阅LICENSE。

安装

  • 运行 composer require sst/surveylib-bundle
  • 创建实体,基于Interfaces/Entity中的接口(见下文)

内容

实体

此扩展包提供接口和特性来满足通用调查应用程序的需求。

此扩展包假设这些实体存储在App\Entity\Survey命名空间中,如果不是这种情况,您可以在配置中更改此设置(见下文)。

可用的实体及其特性和接口包括:

  • 调查:调查的基础,包含一系列容器
    • 特性:Sst\SurveyLibBundle\Entity\Traits\SurveyTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\SurveyInterface
  • 容器:用于存储一个或多个元素使用或一个或多个子容器(任选其一,子容器和元素使用的组合是不允许的)
    • 特性:Sst\SurveyLibBundle\Entity\Traits\ContainerTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\ContainerInterface
  • 元素:调查元素的基础,例如问题或文本片段。
    • 特性:Sst\SurveyLibBundle\Entity\Traits\ElementTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\ElementInterface
  • 元素使用:元素使用是对元素的引用,可以在容器中使用。
    • 特性:Sst\SurveyLibBundle\Entity\Traits\ElementUsageTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\ElementUsageInterface
  • 调查响应:一组答案,是填写调查的结果。
    • 特性:Sst\SurveyLibBundle\Entity\Traits\SurveyResponseTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\SurveyResponseInterface
  • 答案:包含对元素使用的给定答案。
    • 特性:Sst\SurveyLibBundle\Entity\Traits\AnswerTrait
    • 接口:Sst\SurveyLibBundle\Interfaces\Entity\AnswerInterface

数据模型

Datamodel

元素实体和ElementData

元素实体有一个参数elementData,在其中可以存储有关元素的所有数据。ElementData与元素的type相匹配,因此确保在创建元素时设置有效的typeElementData组合。

此扩展包提供几种默认的ElementData类型。

您可以扩展或覆盖这些类型,只要您的ElementData实现了正确的接口,并与元素的type相匹配。

显示条件

此扩展包提供一个服务,用于检查给定的元素使用是否应根据给定的调查响应显示。
为了识别元素,它使用元素使用的code参数。
提供的displayConditionService假定ElementUsage->display_condition包含一个有效的表达式,请参阅Symfony表达式语言
因此,请确保此代码在您检查的集合中是唯一的,通常这意味着它应该与相关调查中的代码唯一。

服务

此扩展包包含多个可在您的调查项目中使用的服务。当使用它们的接口时,这些服务将自动注入。这可以通过提供配置文件来覆盖(见下文)。

  • createSurveyResponseService:创建一个新的调查响应,与给定的调查相关联,并存储开始日期和打乱的元素顺序(如果适用)
  • displayConditionService:检查给定的元素使用是否应根据给定的调查响应显示,还提供了获取条件为php或javascript的功能
  • astToJavascriptService:将AST转换为JavaScript
  • nextElementService:获取用于显示的下一个ElementUsage,也可以通过将$reverse设置为true来获取上一个项目
  • addAnswerService:根据给定的ElementUsage和给定的原始答案向SurveyResponse添加一个或多个答案
  • validateAnswerService:验证给定答案的给定ElementUsage

自定义

您可以通过在项目中提供配置文件来自定义实现哪个类实现哪个接口。
如果您想这样做,创建一个包含以下内容的文件config/packages/sst_survey_lib.yaml

sst_survey_lib:
    services:
        createSurveyResponseService: Sst\SurveyLibBundle\Service\CreateSurveyResponseService
        displayConditionService: Sst\SurveyLibBundle\Service\DisplayConditionService
        astToJavascriptService: Sst\SurveyLibBundle\Service\AstToJavascriptService
        nextElementService: Sst\SurveyLibBundle\Service\NextElementService
        addAnswerService: Sst\SurveyLibBundle\Service\AddAnswerService
        validateAnswerService: Sst\SurveyLibBundle\Service\ValidateAnswerService
    entities:
        survey: App\Entity\Survey
        container: App\Entity\Container
        element: App\Entity\Element
        elementOverride: Sst\SurveyLibBundle\Entity\ElementOverride
        elementUsage: App\Entity\ElementUsage
        surveyResponse: App\Entity\SurveyResponse
        answer: App\Entity\Answer
    typeMappings:
        elementData: Sst\SurveyLibBundle\Types\ElementDataType
        rawAnswer: Sst\SurveyLibBundle\Types\RawAnswerType
        elementOverride: Sst\SurveyLibBundle\Types\ElementOverrideType

这些是默认值,如果您需要这些值,则不需要创建该文件。如果您需要更改这些值,请将(部分)上面的代码复制到该文件中。

事件

此包提供了一些您可以监听的事件。

  • SurveyResponseCreate::PRE_CREATE在创建调查响应之前分发

  • SurveyResponseCreate::POST_CREATE在创建调查响应之后分发

  • AnswerCreate::PRE_CREATE在创建答案之前分发

  • AnswerCreate::POST_CREATE在创建答案之后分发

  • AnswerCreate::PRE_UPDATE在更新答案之前分发

  • AnswerCreate::POST_UPDATE在更新答案之后分发

  • AnswerCreate::PRE_VALIDATE在验证答案之前分发

  • AnswerCreate::POST_VALIDATE在验证答案之后分发