zikula/dynamic-form-bundle

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

资助包维护!
craigh

安装: 472

依赖: 0

建议: 0

安全性: 0

星级: 1

关注者: 7

分支: 0

开放问题: 3

类型:symfony-bundle

v1.0.1 2023-09-15 19:59 UTC

This package is auto-updated.

Last update: 2024-09-15 22:17:06 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 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,
    ]);

更多信息