The DynamicFormBundle
offers helpers for handling dynamic form fields (forms built from definitions stored in
the database). This can be helpful for several applications where a site admin (not the developer) needs to configure
the fields of a form, like contact forms, surveys or exams, employment applications, etc.
Make sure Composer is installed globally, as explained in the installation chapter of the Composer documentation.
Open a command console, enter your project directory and execute:
$ composer require zikula/dynamic-form-bundle
Open a command console, enter your project directory and execute the following command to download the latest stable version of this bundle:
$ composer require zikula/dynamic-form-bundle
Then, enable the bundle by adding it to the list of registered bundles
in the config/bundles.php
file of your project:
// config/bundles.php
return [
// ...
Zikula\Bundle\DynamicFormBundle\ZikulaDynamicFormBundle::class => ['all' => true],
];
In order to implement this bundle, the developer must create three entities:
- A 'container' Entity that holds both:
- The form specifications (OneToMany)
- The response data (OneToMany)
- This may extend
AbstractSpecificationContainer
- A 'wrapper' Entity that defines the form specification.
- This must extend
AbstractFormSpecification
- This must extend
- A 'response' Entity to contain the data responses to the forms.
- This must extend
AbstractResponseData
- This must extend
The Zikula\Bundle\DynamicFormBundle\Form\Type\FormSpecificationCollectionType
formType is a collection of Form
Specifications in your form. You must define the entry_type
to be your own 'wrapper' Entity (item 2 above). Each
member of the collection provides a form type to define all the needed details of a formType (a FormSpecification
).
Form options are loaded using ajax and dynamically added/replaced in the form.
$builder
->add('questions', FormSpecificationCollectionType::class, [
'entry_options' => [
'data_class' => Question::class // required
],
])
IMPORTANT NOTE: The Javascript for these actions is automatically loaded. However, the javascript is jQuery-based. Therefore, you must include jQuery in your front-end assets.
The bundle also provides the Zikula\Bundle\DynamicFormBundle\Form\Type\DynamicFieldsType
formType. This
provides for inclusion of the defined dynamic fields. The formType requires the specificationContainer
object.
This object implements Zikula\Bundle\DynamicFormBundle\Container\SpecificationContainerInterface
. This can be your
'Container' object (item 1 above) or possibly another provider like a Repository. The object must provide a list of form
specifications (as defined by the 'wrapper' class). This list can be optionally sorted or filtered as required.
Example:
$builder->add('survey', DynamicFieldsType::class, [
'specificationContainer' => $myContainer,
]);
- see Additional Documentation
- This bundle suggests scienta/doctrine-json-functions
- You must configure the DoctrineJsonFunctions bundle at the application level. It is not done automatically.