Create custom Form field¶
You can extend the Form Builder by adding new Form fields or modifying existing ones. Define new form fields in configuration.
Configure Form field¶
For example, to create a Country Form field in the "Custom form fields" category, provide the following configuration under the ibexa_form_builder.fields configuration key:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Available attribute types are:
| Type | Description |
|---|---|
string |
String |
text |
Text block |
integer |
Integer number |
url |
URL |
multiple |
Multiple choice |
select |
Dropdown |
checkbox |
Checkbox |
location |
Content location |
radio |
Radio button |
action |
Button |
choices |
List of available options |
Each type of Form field can have validators of the following types:
requiredmin_lengthmax_lengthmin_choicesmax_choicesmin_valuemax_valueregexupload_sizeextensions
Create mapper¶
New types of fields require a mapper which implements the Ibexa\Contracts\FormBuilder\FieldType\Field\FieldMapperInterface interface.
To create a Country field type, implement the FieldMapperInterface interface in src/FormBuilder/Field/Mapper/CountryFieldMapper.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Then, register the mapper as a service:
1 2 3 4 5 6 7 | |
Now you can go to back office and build a new form. You should be able to see the new section in the list of available fields:

And a new Country Form field:

Modify existing Form fields¶
Field or field attribute definition can be modified by subscribing to one of the following events:
ibexa.form_builder.field.<FIELD_ID>ibexa.form_builder.field.<FIELD_ID>.<ATTRIBUTE_ID>
The following example adds a custom string attribute to single_line field definition.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Register this subscriber as a service:
1 2 3 4 5 | |
Access Form field definitions¶
Field definitions are accessible through:
Ibexa\FormBuilder\Definition\FieldDefinitionFactoryin the back end- global variable
ibexa.formBuilder.config.fieldsConfigin the front end