sst / survey-lib-bundle
调查问卷的Symfony扩展包
Requires
- php: >=8.1
- doctrine/collections: ^2.1
- doctrine/orm: ^2.14
- stof/doctrine-extensions-bundle: ^1.7
- symfony/config: ^6.4
- symfony/dependency-injection: ^6.4
- symfony/event-dispatcher: ^6.4
- symfony/expression-language: ^6.4
- symfony/http-kernel: ^6.4
- symfony/property-access: ^6.4
- symfony/serializer: ^6.4
- symfony/validator: ^6.4
Requires (Dev)
- phpunit/phpunit: ^10.0
- slevomat/coding-standard: ^8.10
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
- 特性:
数据模型
元素实体和ElementData
元素实体有一个参数elementData
,在其中可以存储有关元素的所有数据。ElementData与元素的type
相匹配,因此确保在创建元素时设置有效的type
和ElementData
组合。
此扩展包提供几种默认的ElementData类型。
您可以扩展或覆盖这些类型,只要您的ElementData实现了正确的接口,并与元素的type
相匹配。
显示条件
此扩展包提供一个服务,用于检查给定的元素使用是否应根据给定的调查响应显示。
为了识别元素,它使用元素使用的code
参数。
提供的displayConditionService
假定ElementUsage->display_condition
包含一个有效的表达式,请参阅Symfony表达式语言。
因此,请确保此代码在您检查的集合中是唯一的,通常这意味着它应该与相关调查中的代码唯一。
服务
此扩展包包含多个可在您的调查项目中使用的服务。当使用它们的接口时,这些服务将自动注入。这可以通过提供配置文件来覆盖(见下文)。
createSurveyResponseService
:创建一个新的调查响应,与给定的调查相关联,并存储开始日期和打乱的元素顺序(如果适用)displayConditionService
:检查给定的元素使用是否应根据给定的调查响应显示,还提供了获取条件为php或javascript的功能astToJavascriptService
:将AST转换为JavaScriptnextElementService
:获取用于显示的下一个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
在验证答案之后分发