zikula / dynamic-form-bundle
一个提供动态表单辅助器的Symfony扩展包。
Requires
- php: ^7.4 || ^8.0
- doctrine/orm: ^2.11
- symfony/asset: ^5.4 || ^6.0
- symfony/event-dispatcher-contracts: ^2.0 || ^3.0
- symfony/form: ^5.4 || ^6.0
- symfony/framework-bundle: ^5.4 || ^6.0
- symfony/intl: ^5.4 || ^6.0
- symfony/string: ^5.4 || ^6.0
- symfony/translation: ^5.4 || ^6.0
- symfony/translation-contracts: ^2.0 || ^3.0
- symfony/twig-bundle: ^5.4 || ^6.0
- symfony/validator: ^5.4 || ^6.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
formType 是表单中的表单规范集合。您必须定义 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
formType。它提供包含定义的动态字段的选项。表单类型需要 specificationContainer
对象。此对象实现 Zikula\Bundle\DynamicFormBundle\Container\SpecificationContainerInterface
。此对象可以是您的 '容器' 对象(如上所述的第1项)或可能是其他提供者,如存储库。该对象必须提供一个表单规范列表(由 '包装' 类定义)。此列表可以根据需要进行排序或过滤。
示例
$builder->add('survey', DynamicFieldsType::class, [ 'specificationContainer' => $myContainer, ]);
更多信息
- 请参阅 附加文档
- 此Bundle建议 scienta/doctrine-json-functions
- 您必须在应用程序级别配置DoctrineJsonFunctions Bundle。这不是自动完成的。