alamarnissi / json-dynamic-form-builder
A dynamic JSON form builder library for PHP.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/alamarnissi/json-dynamic-form-builder
Requires
- php: >=7.3
- ext-json: *
- beberlei/assert: ^3.2
- marc-mabe/php-enum: ^4.2
Requires (Dev)
- ramsey/uuid: ^4.0
- tm/tooly-composer-script: ^1.4
README
Create Dynamic Form-Configurations in a JSON Format to render it with your Frontend Environment of Choice
Features
- ✅ Define forms using object-oriented PHP
- 🧱 Supports all common input fields (input, checkbox, radio, select, textarea)
- 📝 Textual elements like headlines, paragraphs, quotes
- 📦 Container support (planned): Group fields in columns or sections
- 🧩 Extensible architecture (add your own field types!)
- 🔄 JSON serialization: Export your form to use in frontend apps
- 🧪 Unit test ready and clean structure
- ⚙️ Composer-ready (planned for Packagist)
Supported Form Elements
Form Fields
- Input with different Types like "text", "color", "range, "number"
- Textarea
- Single Checkbox
- Checkbox Groups
- Single RadioButton
- RadioButton Group
- Select / Select (multiple)
Text Elements
- Headlines (h1 - h6)
- Paragraphs
- Quote
- Container (div)
Extendable
Create your own Form or Text Element like Image-Uploads or totally custom Elements.
Directory Structure
JsonFormBuilder/ ├── JsonForm/ # Core classes │ ├── FormField/ # Input field types │ ├── FormTextElement/ # Text elements (headlines, paragraphs) │ ├── FormFieldCollection.php │ ├── ... ├── tests/ # PHPUnit tests ├── composer.json └── README.md
Planned Extensions
| Feature | Status |
|---|---|
| Field validation rules | 🔜 Planned |
| Conditional logic support | 🔜 Planned |
| Container/grouping layout | 🔜 Planned |
| API for frontend usage | 🔜 Planned |
| Vue/React renderer | 🔜 Planned |
| Submission endpoint support | 🔜 Planned |
Planned Extensions
| Class | Description |
|---|---|
JsonForm |
Main form container. |
FormFieldCollection |
Manages fields. |
FormTextElementCollection |
Manages headings, paragraphs, etc. |
Input, Checkbox, Select, etc. |
Various field types. |
Headline1 through Headline6 |
Header elements. |
Paragraph, Quote |
Textual elements. |
Basic Example
Code
use JsonFormBuilder\JsonForm; use JsonFormBuilder\JsonForm\FormField\Checkbox; use JsonFormBuilder\JsonForm\FormField\CheckboxGroup; use JsonFormBuilder\JsonForm\FormField\Input; use JsonFormBuilder\JsonForm\FormField\Option; use JsonFormBuilder\JsonForm\FormField\OptionCollection; use JsonFormBuilder\JsonForm\FormFieldCollection; use JsonFormBuilder\JsonForm\FormTextElement\Headline1; use JsonFormBuilder\JsonForm\FormTextElement\Paragraph; use JsonFormBuilder\JsonForm\FormTextElementCollection; use Ramsey\Uuid\Uuid; $formFields = FormFieldCollection::emptyList() ->add(new Input(Uuid::uuid4()->toString(), 'Input', 3)) ->add(new Checkbox(Uuid::uuid4()->toString(), 'Checkbox', 4)) ->add(new CheckboxGroup( Uuid::uuid4()->toString(), 'CheckboxGroup', 5, OptionCollection::emptyList() ->add(new Option('A', 'A')) ->add(new Option('B', 'B')) )); $formElements = FormTextElementCollection::emptyList() ->add(new Headline1(Uuid::uuid4()->toString(), 'Your First Dynamic Form', 1)) ->add(new Paragraph(Uuid::uuid4()->toString(), 'Create your custom Form', 2)); $form = new JsonForm(Uuid::uuid4()->toString(), $formFields, $formElements);
JSON
{
"jsonFormId":"2febf4cd-9c54-4ca4-b619-b51f6321dc8e",
"formFields":[
{
"formFieldId":"afa99e5a-b585-4d3b-8d03-6c196b7c16eb",
"label":"Input",
"defaultValue":null,
"required":false,
"visible":true,
"position":3,
"formFieldType":"input",
"inputType":"text",
"class":"JsonFormBuilder\\JsonForm\\FormField\\Input"
},
{
"formFieldId":"5ab7faba-3547-46c5-a237-6164879c339d",
"label":"Checkbox",
"position":4,
"defaultValue":false,
"required":false,
"visible":true,
"formFieldType":"checkbox",
"class":"JsonFormBuilder\\JsonForm\\FormField\\Checkbox"
},
{
"formFieldId":"1f4ca288-9f04-48b3-ba93-8367a46f84d4",
"formFieldType":"checkbox_group",
"label":"CheckboxGroup",
"position":5,
"defaultValue":[
],
"required":false,
"visible":true,
"options":[
{
"label":"B",
"value":"B"
},
{
"label":"A",
"value":"A"
}
],
"class":"JsonFormBuilder\\JsonForm\\FormField\\CheckboxGroup"
}
],
"formTextElements":[
{
"formTextElementId":"9a9c41b1-3ecf-4eef-a383-98567b0c8a28",
"formTextElementType":"h1",
"text":"Your·First·Dynamic·Form",
"position":1,
"class":"JsonFormBuilder\\JsonForm\\FormTextElement\\Headline1"
},
{
"formTextElementId":"980954c1-acc5-4025-bc2e-97b4962fcc4f",
"formTextElementType":"p",
"text":"Create·your·custom·Form",
"position":2,
"class":"JsonFormBuilder\\JsonForm\\FormTextElement\\Paragraph"
}
]
}