on5 / dynamic-form-bundle
一个提供动态表单辅助工具的 Symfony 扩展包。
Requires
- php: ^7.4 || ^8.0
- doctrine/orm: ^2.11
- symfony/asset: ^5.4 || ^6.0 || ^7.0
- symfony/event-dispatcher-contracts: ^2.0 || ^3.0
- symfony/form: ^5.4 || ^6.0 || ^7.0
- symfony/framework-bundle: ^5.4 || ^6.0 || ^7.0
- symfony/intl: ^5.4 || ^6.0 || ^7.0
- symfony/string: ^5.4 || ^6.0 || ^7.0
- symfony/translation: ^5.4 || ^6.0 || ^7.0
- symfony/translation-contracts: ^2.0 || ^3.0
- symfony/twig-bundle: ^5.4 || ^6.0 || ^7.0
- symfony/validator: ^5.4 || ^6.0 || ^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: 3.26.1
- phpstan/extension-installer: 1.3.1
- phpstan/phpstan: 1.10.34
- phpstan/phpstan-symfony: 1.3.2
- phpunit/phpunit: 9.6.12
- roave/security-advisories: dev-latest
Suggests
- scienta/doctrine-json-functions: To extract and search for data within the json data.
README
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,开发者必须创建三个实体
- 一个“容器”实体,它同时包含
- 表单规范(OneToMany)
- 响应数据(OneToMany)
- 这可以扩展
AbstractSpecificationContainer
- 一个“包装器”实体,用于定义表单规范。
- 这必须扩展
AbstractFormSpecification
- 这必须扩展
- 一个“响应”实体,用于包含对表单的响应数据。
- 这必须扩展
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, ]);
更多信息
- 请参阅附加文档
- 此 bundle 建议使用scienta/doctrine-json-functions
- 您必须在应用程序级别配置 DoctrineJsonFunctions bundle。这不是自动完成的。