on5/dynamic-form-bundle

一个提供动态表单辅助工具的 Symfony 扩展包。

资助包维护!
craigh

安装: 109

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

1.4.0 2024-07-25 00:26 UTC

This package is not auto-updated.

Last update: 2024-09-19 01:08:26 UTC


README

Build Status codecov License

DynamicFormBundle 提供处理动态表单字段(从数据库中存储的定义构建的表单)的辅助工具。这对于需要网站管理员(而不是开发者)配置表单字段的应用程序非常有用,例如联系表单、调查、考试、就业申请等。

一个示例 SurveyMaker 应用程序可用.

安装

请确保已全局安装 Composer,如 Composer 文档中的安装章节所述。

使用 Symfony Flex 的应用程序

打开命令行控制台,进入您的项目目录并执行

$ composer require zikula/dynamic-form-bundle

不使用 Symfony Flex 的应用程序

步骤 1:下载 Bundle

打开命令行控制台,进入您的项目目录并执行以下命令以下载此 bundle 的最新稳定版本

$ composer require zikula/dynamic-form-bundle

步骤 2:启用 Bundle

然后,通过将其添加到项目中 config/bundles.php 文件中注册的 bundle 列表中来启用该 bundle

// config/bundles.php

return [
    // ...
    Zikula\Bundle\DynamicFormBundle\ZikulaDynamicFormBundle::class => ['all' => true],
];

入门指南

为了实现此 bundle,开发者必须创建三个实体

  1. 一个“容器”实体,它同时包含
    1. 表单规范(OneToMany)
    2. 响应数据(OneToMany)
    3. 这可以扩展 AbstractSpecificationContainer
  2. 一个“包装器”实体,用于定义表单规范。
    1. 这必须扩展 AbstractFormSpecification
  3. 一个“响应”实体,用于包含对表单的响应数据。
    1. 这必须扩展 AbstractResponseData

表单创建:构建表单

Zikula\Bundle\DynamicFormBundle\Form\Type\FormSpecificationCollectionType 表单类型是您表单中表单规范的集合。您必须定义 entry_type 为您自己的“包装器”实体(如上所述第 2 项)。集合中的每个成员都提供了一种表单类型来定义表单类型(FormSpecification)的所有必需细节。表单选项通过 Ajax 加载并在表单中动态添加/替换。

    $builder
        ->add('questions', FormSpecificationCollectionType::class, [
            'entry_options' => [
                'data_class' => Question::class // required
            ],
        ])

重要说明:这些操作的 JavaScript 自动加载。但是,JavaScript 基于 jQuery。因此,您必须在您的前端资源中包含 jQuery。

表单创建:响应表单

该 bundle 还提供了 Zikula\Bundle\DynamicFormBundle\Form\Type\DynamicFieldsType 表单类型。这提供了包含定义的动态字段的功能。表单类型需要 specificationContainer 对象。该对象实现 Zikula\Bundle\DynamicFormBundle\Container\SpecificationContainerInterface。这可以是您的“容器”对象(如上所述第 1 项)或可能的其他提供者,如存储库。对象必须提供表单规范的列表(如“包装器”类定义)。此列表可以按需排序或过滤。

示例

    $builder->add('survey', DynamicFieldsType::class, [
        'specificationContainer' => $myContainer,
    ]);

更多信息